4

ポップアップ カレンダーの日付ピッカーのコントロールを使用しています。これは、JavaScript 関数 SetText を使用して、テキスト ボックスを指定された日付に設定します。カレンダー コントロール自体を変更することはできませんが、SetText 関数をオーバーライドすることはできます。SetText JavaScript は、TextBox 名と日付値を文字列形式で取得し、TextBox を文字列に設定します。

問題: 日付を「4 月 30 日」の形式で表示する必要があります。

簡単にできます。そこから情報を解析できる getMonth() と getDate() を使用します。

ここで、これが異なる文化に対して正しく表示されることを確認する必要があります。たとえば、英国では日付が「4 月 30 日」と表示されます。コード ビハインド (c#) は日付を UK 形式で送信している可能性があるため、JavaScript で US (mm/dd/yyyy) ではなく UK(dd/mm/yyyy) を使用していることをどのように知ることができますか?
ブラウザのナビゲータ言語をある設定に設定し、サーバーを別の設定に設定すると、1 月 4 日と 4 月 1 日の不一致が発生する可能性があります。

4

8 に答える 8

4

Microsoft Ajax Frameworkを使用している場合、このフレームワークは、JavaScriptベースタイプに追加機能または「拡張機能」を提供する「クライアント側タイプ拡張機能」のセットを定義します。

日付型拡張機能、具体的にはDate.parseLocale関数を探しています。

この関数を使用すると、特定の形式を使用して文字列を解析できます。

ScriptManager.EnableScriptGlobalizationプロパティをtrueに設定することで、サーバー側とクライアント側のカルチャを同期し、形式を指定せずにDate.parseLocale関数を使用できます。

この記事を見てください:

于 2009-07-24T02:18:54.710 に答える
2

toLocaleStringおよび関連する関数を参照してください。

于 2009-04-30T21:10:16.387 に答える
1

toLocaleDateStringは、時刻が含まれていないため(日付のみを要求しているため)、問題に対してtoLocaleStringよりも優れたソリューションになります。

于 2009-07-25T16:50:11.420 に答える
1

あなたが使用できる3つのこと:

1) toLocaleString - すでに提案されているように。これに関する問題は、「2009 年 4 月 1 日」という文字列を送信すると、いくつかの問題が発生する可能性があることです。1 月 4 日または 4 月 1 日。

2) navigator.language およびnavigator.systemLanguage - 日付文字列を取得したら、システムの言語を確認し、そこから日付を解析できます。これと解決策 1 の問題は、英国のサーバーがあり、ブラウザのマシンが米国の場合です。4 月 1 日を 1/4/2009 として送信する背後にあるコードがあり、JavaScript は文字列をクライアントのブラウザの言語として読み取ります。そのため、英国のサーバーと米国のブラウザーでは間違った結果が返されます。

3) コード ビハインド カルチャを使用する - JavaScript で変数を作成します。この変数は、ページが読み込まれたときにコード ビハインドでthis.Page.Cultureそこから返される関数を呼び出します。文字列がどのカルチャとして送り返されているかがわかります。これにより、最初の 2 つのソリューションが引き起こす不一致が解消されます。正しく表示されるようにするには少し余分な作業が必要ですが、少なくともカルチャが一致しない可能性なしに文字列を使用できます。

于 2009-05-05T13:19:46.350 に答える
1

オープンソースの JavaScript ライブラリ Date.js には、日付をフォーマットする優れたメソッドがいくつかあり、多数の言語をサポートしています。

Google コードの Date.js: http://code.google.com/p/datejs/

適切にフォーマットされた日付/時刻が必要な場合は、フォーマット文字列(.NET Framework で使用されるものとほぼ同じ) を任意の Date オブジェクトの.toString()メソッドに渡すだけです。

また、そのカルチャに適切なスクリプトを簡単に含めることができるカルチャのセット全体もあります。

自分で管理したい場合 (アプリで行っているように)、特定のカルチャに適したリソース文字列のリストを提供するリソースを見つけることができます。これは、大量の文化に適した書式設定文字列を示すものです: http://www.transactor.com/misc/ranges.html

于 2009-07-30T06:10:55.060 に答える
0

ASP.NETを使用している場合は、ASP.NETAjaxも使用している可能性があります。その場合、 ScriptManagerには次の2つのプロパティがあります。

EnableScriptLocalization -ScriptManagerコントロールがスクリプトファイルのローカライズされたバージョンをレンダリングするかどうかを示す値を取得または設定します。

EnableScriptGlobalization -ScriptManagerコントロールがカルチャ固有の情報の解析とフォーマットをサポートするスクリプトをレンダリングするかどうかを示す値を取得または設定します。

<asp:ScriptManager ID="AjaxManager" runat="Server" EnablePartialRendering="true"
            EnableScriptGlobalization="true" EnableScriptLocalization="true" />

これらの両方を有効にすると(trueに設定)、ASP.NETAjaxエクステンダーなどがweb.configで指定されたカルチャに自動的にローカライズされます。

<configuration>
  <system.web>
    <globalization 
       fileEncoding="utf-8" 
       requestEncoding="utf-8" 
       responseEncoding="utf-8" 
       culture="en-GB" 
       uiCulture="en-GB" />  
  </system.web>
</configuration>

たとえば、これを設定すると、AjaxControlToolkitカレンダーが特定のカルチャにローカライズされます。

ASP.NET Ajaxを使用していない場合でも、ScriptManagerを追加してローカリゼーションを有効にすると__cultureInfo、通貨や日付などのローカライズされた形式のJSON配列を含むと呼ばれる便利なjavascript変数が得られます。

"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":1,"CalendarWeekRule":0,"FullDateTimePattern":"dd MMMM yyyy HH:mm:ss","LongDatePattern":"dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"dd MMMM","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\u0027:\u0027mm\u0027:\u0027ss etc....
于 2009-07-28T09:22:01.700 に答える
0

Datejsを使用してこの問題を解決しました

  • codebehind(aspx.cs)で、従業員のカルチャを取得し、適切なjsをヘッダーに次のように追加します。

文字列パス=" http://datejs.googlecode.com/svn/trunk/build/date- "+ GetCulture()+ ".js"; Helper.AddJavaScript(this、path);

(あなたの場合、navigator.systemLanguage(またはnavigator.browserLangugeなど)からカルチャを取得し、適切なパスを指すsrc属性を持つスクリプトタグをヘッダーに追加できます)

  • クライアント側で私は使用します

d.toString(Date.CultureInfo.formatPatterns.shortDate)

ここで、dは任意の日付オブジェクトです(Date.today()。toShortDateString()を使用しようとしましたが、例外がスローされていました(CultureInfo JSONオブジェクトは関数が期待するものとは異なる構造を持っていました)。

于 2009-10-14T16:40:29.797 に答える