2017-01-02 7 views
0

プロジェクトのDateクラスtoLocaleDateString()のjavascript関数を使用して、ユーザーのロケールに応じて適切な書式を設定します。しかし、月の日は必ずしも正しいとは限りません(いつかは予想よりも1日少ない)。なぜこれが起こるのか分かりません。javascript関数の日付が間違っていますtoLocaleDateString()

問題を表示するためにjsfiddleを作成しました。それは10月の月に発生します。日付はすべて他の月のように3でなければなりませんが、何とかそれはここで2

https://jsfiddle.net/vincepunkrock/nh1u3ord/

だ(私のロケールが「デ」です)コードと結果の重要な部分である:

for(var i = 0; i < 12; i++) 
{ 
    var d = new Date(1993,i,3); 
    var n = d.toLocaleDateString(); 
    document.getElementById("demo").innerHTML += n + "<br>"; 
} 

3.1.1993 
3.2.1993 
3.3.1993 
3.4.1993 
3.5.1993 
3.6.1993 
3.7.1993 
3.8.1993 
3.9.1993 
2.10.1993 
3.11.1993 
3.12.1993 

あなたはここで何が起こっているのか、それを解決するために何ができるのでしょうか?

ありがとうございました!

+2

1993年の「夏時間」(または「夏時間」)は、いつあなたの地域で終了しましたか? – Pointy

+0

それはseptにあった。 26日。確かに、私は27日に日付を設定すると、私は9月と10月の月の26日を取得します。あなたは正しい道にいました! –

+0

"* ...ユーザーのロケールに応じて適切な書式を設定するには..." * toLocaleDateString *は完全に実装依存であり、一部の実装ではユーザ設定を完全に無視するように見えるため、保証はありません。 – RobG

答えて

1

私はPointyが彼のコメントでそれを打ち明けたと思う。 toLocalDateStringは、指定されていないので、DSTには00:00:0000の推定時間が含まれているため、前の日付に「フォールバック」時間が入ります。私はあなたのロケールが1ヶ月でしか起こらないことは確かではありませんが、私はタイムゾーンでプロではありません。スクリプトは私にとって完璧に機能します。

更新:希望の動作でない場合は、新しい日付の「時間」を1日の中点に設定してください。夏時間の調整は異なる日付に前後しません。

var d = new Date(1993,i,3, 12,30,30,30); 
+0

変更の正確な瞬間にDSTへの変更をどのように処理するかは実装によって異なります。新しい日付(1993、i、3,1)で十分であるはずなので、1時間以上変化していない(一部は少ない)ので、深夜1時間以上の時間を設定するだけで十分です。 ;-) – RobG

0

フランス語で最初に動作する言語。ブラウザの言語設定が結果に奇妙に影響するようです。 ブラウザの言語設定を確認してください。

+0

メソッド名に "Locale"を使用すると、誤った名前になります。 * toLocaleString *メソッドは完全に実装依存であり、 "ロケール"を考慮しません。そうしないと、ユーザーの設定ではなく、デバイスの地理的位置に基づいて文字列の書式が変更されます彼らはまったく何かを使う)。 – RobG

関連する問題