4

簡単なJavascriptで日付を操作しようとしています。コードは次のとおりです。

var newDate = new Date("2013-07-23" + " 12:00:00");
console.log(newDate.toString());
newDate = new Date(newDate.getTime() - (24 * 60 * 60 * 1000));
console.log(newDate.toString());
var date = newDate.getFullYear() + "-" + ("0" + (newDate.getMonth() + 1)).slice(-2) + "-" + ("0" + newDate.getDate()).slice(-2);
console.log(date);

本質的に、私は変換しています

2013-07-23 -> Jul 22 2013 12:00:00 GMT+1000 -> 2013-07-22

Chrome で問題なく動作します。このFiddleを介してコードをテストできます。それはいつも戻ってくる

"Invalid Date"
"Invalid Date"
"NaN-aN-aN"

console.logsただし、Firefoxの 3 つについては次のとおりです。

Tue Jul 23 2013 12:00:00 GMT+1000 (E. Australia Standard Time)
Mon Jul 22 2013 12:00:00 GMT+1000 (E. Australia Standard Time) 
2013-07-22

クロム用。

4

3 に答える 3

5

日付形式は「IETF 準拠の RFC 2822 タイムスタンプ」である必要があり、そうでない場合はブラウザ間の不一致が発生します。

ここでそれについて読んでください:http://dygraphs.com/date-formats.html

-ただし、基本的には、' ' を ' 'に置き換えるだけ/で、既存のブラウザーで動作するようにする必要があります。

于 2013-09-29T01:02:02.130 に答える
2

YYYY-MM-DD HH:MM:SS仕様では、日付形式を解析する必要はありません。

new Date: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

parse メソッドの場合とまったく同じ方法で、v を日付として解析します。

(本質的には と同じ結果Date.parse(...))

Date.parse: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

この関数は、まず、日時文字列形式 (15.9.1.15) で呼び出された規則に従って、文字列の形式を解析しようとします。文字列がその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックする可能性があります。認識できない文字列または文字列形式の不正な要素値を含む日付により、Date.parse は NaN を返します。

日時文字列形式: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

形式は次のとおりです。YYYY-MM-DDTHH:mm:ss.sssZ

を含む他の形式が機能するという保証はありませんYYYY-MM-DD HH:MM:SS

準拠した日付文字列をいつでも作成できます。

var newDate = new Date("2013-07-23" + "T12:00:00.000Z");
console.log(newDate.toString());
newDate = new Date(newDate.getTime() - (24 * 60 * 60 * 1000));
console.log(newDate.toString());
var date = newDate.getFullYear() + "-" + ("0" + (newDate.getMonth() + 1)).slice(-2) + "-" + ("0" + newDate.getDate()).slice(-2);
console.log(date);
于 2013-09-29T01:10:18.643 に答える
0

Firefox の場合:

new Date("2013-07-23 12:00:00").toString()   // Invalid
new Date("2013-07-23T12:00:00").toString()   // Local noon
new Date("2013-07-23T12:00:00Z").toString()  // UTC noon
new Date("2013/07/23 12:00:00").toString()   // Local noon

Chrome の場合:

new Date("2013-07-23 12:00:00").toString()   // Local noon
new Date("2013-07-23T12:00:00").toString()   // UTC noon
new Date("2013-07-23T12:00:00Z").toString()  // UTC noon
new Date("2013/07/23 12:00:00").toString()   // Local noon

他にも多くの矛盾があります。たとえば、Chrome はそれ自体でさえ一貫性がありません。

new Date("2013-07-23 00:00:00").toString()   // Local midnight
new Date("2013-07-23").toString()            // UTC midnight

一貫した方法で文字列から日付を解析する必要がある場合は、 moment.jsなどのライブラリの使用を検討する必要があります。

moment("2013-07-23 12:00:00", "YYYY-MM-DD HH:mm:ss").format()     // Local noon
moment.utc("2013-07-23 12:00:00", "YYYY-MM-DD HH:mm:ss").format() // UTC noon

主な利点は、入力および出力形式を制御できることであり、すべてのブラウザーで同じように機能します。

于 2013-09-29T01:20:19.383 に答える