2

ヨーロッパ (UK) ロケールの日付形式が、次のように月と年の前にを使用すると仮定します。

EEE, dd MMM yyyy

toLocaleTimeStringオプション weekday= short でそれを使用すると、一貫性のない応答が得られます。日は月の後に来ます。

2013 年 9 月 27 日 (金) 18:38:30 英国時間

ただし、weekday=long を使用すると、予想される日付形式と一致します。

2013 年 9 月 27 日金曜日 18:38:30 英国時間

短いフォーマットを使用するか長いフォーマットを使用するかにかかわらず、一貫性があり、月の前に日が必要であると思います。しかし、これは事実ではありません.これが望ましい動作なのか、それともいくつかの点が欠けているのかわかりません.

Chrome V29 の JavaScript コードは次のとおりです。

    var options = {
        hour: "2-digit",
        minute: "2-digit",
        second: "2-digit",
        year: "numeric",
        month: "short",
        day: "2-digit",
        hour12: false,
        timeZoneName: "short",

        weekday:"short"  //"long"
    }

    var date = new Date("Fri Sep 27 2013 13:38:30 GMT-0400");
    options.timeZone = 'America/New_York'
    console.log(date.toLocaleDateString("en-us",options))

    options.timeZone = 'Europe/London'
    console.log(date.toLocaleDateString("en-gb",options))

出力:

平日 = 短い

2013 年 9 月 27 日 (金) 1:38:30 PM ET 2013 年 9 月 27 日 (
金) 18:38:30 英国時間

平日 = 長い

2013 年 9 月 27 日金曜日 1:38:30 PM ET 2013 年 9 月 27 日
金曜日 18:38:30 英国時間

期待される:

2013 年 9 月 27 日 (金) 1:38:30 PM ET 2013 年 9 月 27 日 (
金) 18:38:30 英国時間

4

1 に答える 1

3

yearinを省略して日月形式を正しく取得することもできますが、値optionsがないと日付文字列は明らかに役に立ちません。year

var options = {
    hour: "2-digit",
    minute: "2-digit",
    second: "2-digit",
    //year: "numeric",
    month: "short",
    day: "2-digit",
    hour12: false,
    timeZoneName: "short",

    weekday:"short"
}

戻り値:

Fri, Sep 27 1:38:30 PM ET
Fri 27 Sep 18:38:30 United Kingdom Time 

したがって、これで何が起こっているのかがわかるまでの一時的な回避策があります。weekday目的の結果を得るために個別に forを設定できますがen-GB、長い曜日名になってしまいます。

var options = {
        hour: "2-digit",
        minute: "2-digit",
        second: "2-digit",
        year: "numeric",
        month: "short",
        day: "2-digit",
        timeZoneName: "short",
        weekday: "short"
}

    var date = new Date("Fri Sep 27 2013 13:38:30 GMT-0400");
    options.timeZone = "America/New_York";
    console.log(date.toLocaleDateString("en-US",options));

    options.timeZone = "Europe/London";
    options.weekday = "long";
    console.log(date.toLocaleDateString("en-GB",options));

これは以下を返します:

Fri, Sep 27, 2013 1:38:30 PM ET
Friday, 27 Sep 2013 18:38:30 United Kingdom Time 

私はまだこれの原因を見つけようとしています。これは、両方のロケールで期待される値を返す ICU の問題ではないようです (en-GBとの結果を参照してくださいen-US)。短い曜日名の形式を要求する year形式マッチャーenが(を使用する)にフォールバックする可能性がありますE, MMM d y。これが欠陥かどうかを調べるには、さらに調査する必要があります。わかったらここで更新します。

を明示的に設定することについての小さなメモhour12。this のデフォルト値がlocale-dependentであることを考えると、これも省略したほうがよいと思います ( の出力時間形式でわかるように、オーバーライドされますen-GB)。

于 2013-09-28T19:50:06.490 に答える