Date.parse
他の回答が示唆するように、特に西暦 1000 年より前の日付を扱っている場合は、ブラウザ間で信頼することはできません。
Chromeに関する限り、問題はブラウザがタイムゾーンを処理する方法にあるようです. 次の例は、1000 CE より前に、Chrome がその上にローカル タイムゾーンの日付を解析することを示しています。>= 1000 CE、最初に UTC で日付を解析し、次にタイムゾーン変換を適用するように見えます:
> new Date('1000')
"Tue Dec 31 999 16:00:00 GMT-0800 (PST)"
> new Date('999')
"Tue Jan 01 999 00:00:00 GMT-0800 (PST)"
私はこれをバグと見なす傾向がありますが、おそらくChromiumチームはそれが機能だと考えています:)。
肝心なのは、何年もの間、特に古代の正確な日付の解析が必要な場合は、自分で何らかの作業を行うか、ライブラリを使用する必要があるということです。Moment.jsとDatejsはどちらも役立つかもしれませんが、どちらも古代をうまく扱えるとは思えません。Moment.js にも同じ問題があるようです (Chrome の場合):
> moment('999').year()
999
> moment('1000').year()
999
古代に基づいて日付を正確に設定するために私が知っている最善の方法は、一般に、a) 常に UTC を使用し、b) 日付を手動で設定することです。
var d = new Date();
d.setUTCFullYear('999');
d.getUTCFullYear(); // 999
d.setUTCFullYear('1000');
d.getUTCFullYear(); // 1000
少なくとも Chrome では、これは文字列と整数の両方で機能します。
AD、CE、BC、および BCE 拡張子を持つ古い年と負の数を処理gregorian
する Timemap.js ライブラリのパーサーにも興味があるかもしれません。