時代遅れで、すべての Web ブラウザーtoLocaleString()
で正しく実装されていないを使用する代わりに、日付と時刻の書式設定にGlobalizeを使用することを強くお勧めします。
次に、クライアント側で日付をフォーマットするには、有効なカルチャを割り当てて、フォーマット関数を呼び出すだけです。
Globalize.culture(theCulture);
Globalize.format( new Date(2012, 1, 20), 'd' ); // short date format
Globalize.format( new Date(2012, 1, 20), 'D' ); // long date format
とてもシンプルですね。それを ASP.Net アプリケーションにも統合する必要があるため、少し複雑になります。まず、通常の方法で globalize.js を参照する必要があります。
<script type="text/javascript" src="path_to/globalize.js"></script>
次に、適切なカルチャ定義を含めることをお勧めします。これは、書式設定時に使用する必要があるものです。
<script type="text/javscript" src="path_to/cultures/globalize.culture.<% = CultureInfo.CurrentCulture.ToString() %>.js"></script>
theCulture
最後に、使用する前に変数を設定する必要があります。
<script type="text/javscript">
var theCulture = <% = CultureInfo.CurrentCulture.ToString() %>
</script>
もちろん、よりエレガントな方法は、コード ビハインドでプロパティまたはメソッドを作成し、適切なスクリプトを書き留めてから、メソッドだけを参照することです。たとえば、次のようにします。
public string IntegrateGlobalize(string pathToLibrary)
{
var sb = new StringBuilder();
sb.Append("<script type=\"text/javascript\" src=\"");
sb.Append(pathToLibrary);
sb.AppendLine("/globalize.js\"></script>");
sb.Append("<script type=\"text/javascript\" src=\"");
sb.Append(pathToLibrary);
sb.AppendLine("/cultures/globalize.culture.");
sb.Append(CultureInfo.CurrentCulture);
sb.AppendLine(\"></script>");
sb.Append("<script type=\"text/javascript\">");
sb.Append("var theCulture = ");
sb.Append(CultureInfo.CurrentCulture);
sb.AppendLine(";</script>");
return sb.ToString();
}
次に、(マスター?) ページ ヘッドでこのメソッドを参照するだけです。
<head>
<% = IntegrateGlobalize("path_to_globalize") %>
...
</head>
いくつかの問題
100% 正しく実行したい場合は、Globalize カルチャ ジェネレーターを拡張して'g'
フォーマット スイッチを含め、クライアント側でこの正確なスイッチを使用して日付をフォーマットする必要があります。
Globalize.format( new Date(2012, 1, 20), 'g' ); // default date format
何故ですか?「g」はデフォルトの日付形式であるためです。DateTime
これは、パラメーターなしでのメソッドを呼び出すだけで得られるものですToString()
(これは、唯一のパラメーターとして暗示CultureInfo.CurrentCulture
されます...)。デフォルトの形式が最適です。短い形式、長い形式、またはその他の形式になりますが、このカルチャを使用する人々が最も一般的に使用する形式です。
toLocaleString()
それはすべての Web ブラウザーにとって間違っていると言いました。何故ですか?これは、サーバー側で検出されたカルチャではなく、Web ブラウザーの設定を使用するためです。つまり、同じ Web ページにさまざまな文化が混在している可能性があります。これは、日付の一部がサーバー側でフォーマットされ、他の日付がクライアント側でフォーマットされている場合に発生する可能性があります。そのため、サーバー側からカルチャを渡す (検出する) 必要がありました。
ところで。toLocaleString()
地域設定ダイアログをWebアプリケーションに含めることにした場合、ユーザー設定に従わないため、不一致がさらに目立ちます...