2012-08-27 23 views
6

javascriptライブラリの使用Date.js Date.parse()関数にISO 8601形式のUTC日付を渡すと、私は代表的なオブジェクトを取得しています同じ日付のローカルタイムゾーンが追加されています。 2012-08-27T14:日付を考える例えばDate.jsの間違ったISO 8601 UTC日付の解析

57:00Z午後02時57分UTCの時刻を示しており、(ISO 8601形式で)、この理由は次のように解析されるであろう14:57 GMT-400とは対照的に10:57 GMT-400ですか?

私はcreated a fiddleを実際に示しています。

実際にエラーがある場合、または解析結果の理解が間違っている場合は、教えてください。

答えて

10

うん、それはバグです。さらにa reported oneです。

代わりにMoment.jsライブラリを使用することをおすすめしますか?たとえば、this

console.log(moment('2012-08-27T14:57:00Z').toString());

は...正しくUTC時間が与えられていることを理解するであろう。

+3

さらにレビューを終えると、開発者はDate.jsを使用しなくなるはずです(https://plus.google.com/113127438179392830442/posts/htwWUqxHmUYをご覧ください)。人々を瞬時に導く良いメモ。 – MindWire

+0

なぜ、私はMoment.js、優れたライブラリ、良いコール@ raina77ow :)に遭遇していない – DIGGIDY

2

これはDate.jsのエラーのようですnew Date('2012-08-27T14:57:00Z')を使用すると、正しい日付が返されます。

+0

それが判明しはい、Date.jsのバグです私は2008年以来、新たな発展が見られないので、決して修正されることはないと想定しています。新しいDate(...)で動作することに気をつけてくれてありがとう。それは当面使用する修正となるだろう。 – MindWire

1

これは、DateJSの非常に優れた文法パーサのバグのある実装によって引き起こされます。

基本的に古いバージョンでは、組み込みパーサーを使用できるかどうかを確認したばかりですが、新しいバージョンは文法解析を使用しようとしますが、最初のステップを忘れてしまい、文法パーサがタイムゾーンバグですが、別のバグです)。

この1でparse関数を置き換えます

$D.parse = function (s) { 
    var date, time, r = null; 
    if (!s) { 
     return null; 
    } 
    if (s instanceof Date) { 
     return s; 
    } 

    date = new Date(Date._parse(s)); 
    time = date.getTime(); 
    // The following will be FALSE if time is NaN which happens if date is an Invalid Date 
    // (yes, invalid dates are still date objects. Go figure.) 
    if (time === time) { 
     return date; 
    } else { 
     // try our grammar parser 
     try { 
      r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1")); 
     } catch (e) { 
      return null; 
     } 
     return ((r[1].length === 0) ? r[0] : null); 
    } 
}; 

ここで更新コアコードのバージョン(および将来的に開いているバグを修正されます)ご利用いただけます:

https://github.com/abritinthebay/datejs/

関連する問題