如何在A.D的头几年从Javascript中的字符串日期创建Date对象?

时间:2010-10-12 10:52:38

标签: javascript string parsing date


我有下一个日期字符串:

“Thu Nov 14 0002 01:01:00 GMT + 0200(GTB标准时间)”

我正在尝试将其转换为Date对象:

date = new Date("Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)")  
=> Invalid Date {}

它不起作用。并且

date = new Date("Thu Nov 14 2 01:01:00 GMT+0200 (GTB Standard Time)")  
=> Invalid Date {}

也不起作用

date = new Date("Thu Nov 14 2002 01:01:00 GMT+0200 (GTB Standard Time)")

作品

有谁知道解析它的优雅方法?

2 个答案:

答案 0 :(得分:6)

您可以设置任何日期。包括直接使用时间戳的分钟,小时和毫秒 -     1970年以前的日期是负整数。

alert(new Date(-62076675540000).toUTCString());

// >> Wed, 13 Nov 0002 23:01:00 GMT

Or you can set the date as a string by replacing the years to make it over 1000,
then subtracting the amount you added  with setFullYear()

var d=new Date("Thu Nov 14 1002 01:01:00 GMT+0200 (GTB Standard Time)")
d.setFullYear(d.getFullYear()-1000)
alert(d.toUTCString())

// >> Wed, 13 Nov 0002 23:01:00 GMT

You can automate a conversion to timestamps-

var s="Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)";
var y=s.split(' ')[3], y2=5000+(+y);
var d=new Date(s.replace(y,y2));
d.setFullYear(d.getFullYear()-5000)
var timestamp=+d;
alert(timestamp)
// >> -62076675540000

答案 1 :(得分:3)

Javascript日期基于自1970年1月1日00:00:00.000 UTC以来的毫秒数。之前的日期没有定义。

您必须以自己的方式来表示这些日期。

编辑 - 好吧,说过,Javascript似乎愿意用一个奇怪的大的负片来代表日期;不适合32位整数的偏移量。我怀疑你的日期的根本原因只是它的格式扰乱了解析器。在缩写之后应该有一个逗号。

另一个问题(男孩这比我想象的更有趣)是,在Chrome和Firefox中,至少在任何一年之前,100被视为20世纪一年的缩写。

再次编辑 - 根据Mozilla文档,日期可以是在纪元之前-100,000,000天到100,000,000天后的任何日期。