[解決済み] なぜ「2016-02-16」は「2016-02-16 00:00」と同じにならないのですか?
質問
日付文字列の両方を
new Date(t)
.
どちらの文字列も同じ時刻を表していると思います。結局のところ、時刻を省略するとその日の真夜中になるはずではありませんか?
しかし、一方で
new Date("2016-02-16 00:00")
は予想通り現地時間の2016-02-16, 0時を返します。
new Date("2016-02-16")
は2016-02-16, midnight UTCを返しますが、これは間違っているか、少なくとも他の文字列がどのように解析されるかを考えると私が期待したものではありません。
ローカルタイムとして時刻を返すか、UTCとして時刻を返すか、両方が同じ動作になるなら理解できますが、このように異なるものを返すのは非常に矛盾しているように思われます。
回避策として、対応するタイムスタンプを持たない日付に遭遇するたびに、一貫した動作を得るために " 00:00" を追加できますが、これはかなり壊れやすいように思われます。
私はこの値を 'datetime-local' タイプの INPUT 要素から取得しているので、ページ要素によって返される値を操作しなければならないのは特に一貫性がないように思われます。
私は何か間違ったことをしているのでしょうか、それとも何か違うことをしなければならないのでしょうか?
どのように解決すればよいのでしょうか?
それは ES5.1仕様 に書いてあることです。
不在のタイムゾーンオフセットの値は "Z "です。
とも書いてあります。
<ブロッククオートこの関数はまず、Date Time String Format (15.9.1.15) で呼び出された規則に従って、Stringの書式を解析することを試みます。Stringがそのフォーマットに適合しない場合、この関数は実装固有のヒューリスティックや実装固有の日付フォーマットにフォールバックすることがあります。
フォーマットは
T
の区切り文字が必要なため、有効な時刻はUTCになります。
> new Date("2016-02-16T00:00:00")
Tue Feb 16 2016 01:00:00 GMT+0100 (CET)
> new Date("2016-02-16")
Tue Feb 16 2016 01:00:00 GMT+0100 (CET)
...一方、node.jsでは、無効な時間(Tセパレータなし)は、実装固有のlocaltimeに行くようです。
> new Date("2016-02-16 00:00:00")
Tue Feb 16 2016 00:00:00 GMT+0100 (CET)
なお、ES6では が変更され これは、同じ の部分で に変化します。
タイムゾーンオフセットがない場合、日付時刻はローカル時刻として解釈されます。
の喜びは 変化への挑戦 .
編集
によると TC39 にあるように、この仕様は、タイムゾーンを含まない日付と時刻の文字列(例:"2016-02-16T00:00")はローカル(ISO 8601による)として扱い、日付のみの文字列(例:"2016-02-16")はUTC(ISO 8601と整合しない)として解釈することが意図されています。
関連
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み】UTCの日付時間の文字列をローカルの日付時間に変換する
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] これは純関数ですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?