为什么Date.parse不返回Date对象?

时间:2008-10-28 09:13:52

标签: javascript

today1 = new Date();
today2 = Date.parse("2008-28-10");

要比较这些的时间(毫秒)值,我必须执行以下操作,因为today2只是一个数字。

if (today1.getTime() == today2)

为什么会这样?

4 个答案:

答案 0 :(得分:29)

回答标题中的问题:因为他们在创建JavaScript语言时就这么做了。可能是因为Java的java.util.Date解析函数做了同样的事情,并且他们想模仿它的行为以使语言更熟悉。

回答文中的问题...使用此构造获取两个日期对象:

var today2 = new Date(Date.parse("2008-10-28"));

编辑:一个简单的

var today2 = new Date("2008-10-28");

也有效。

注意 Internet Explorer(即JScript)不了解日期字符串中的破折号。但它适用于斜杠:

var today2 = new Date("2008/10/28");

答案 1 :(得分:4)

如果我没记错的话,Date会给你一个值,直到你创建Date对象的毫秒。因此,除非此代码完全在2008年2月10日00:00:00:000运行,否则它们将不相同。

只是一个补充:Date.parse()按定义返回一个long值,表示Date的毫秒值,而不是Date对象本身。如果你想保留Date对象本身,就像这样构建它:

var newDate = new Date();
newDate.setFullYear(2008,9,28);

如需更多参考,请查看:the Date class reference

答案 2 :(得分:2)

我无法代替语言设计者回答,但您可以使用Date构造函数中的Date.parse或Date.UTC的结果来获取此类对象。

请注意,您的代码示例不正确:它不是有效的日期格式,不是ISO(yyyy-mm-dd),也不是IETF(Mon,1995年12月25日13:30:00 GMT + 0430)。所以你会得到一个NaN。 Date.parse只能理解我在MDC上阅读的IETF格式。

如果您需要比较两个日期,您可以比较.getFullYear(),. getMonth()和.getDay()的结果,或者只是比较所需级别的字符串表示。

var d1 = new Date();
var n = Date.parse("28 Oct 2008");
var d2 = new Date(n);
var d3 = new Date("28 october 2008");

alert(d1.toDateString() == d2.toDateString());
alert(d2.toDateString() == d3.toDateString());

答案 3 :(得分:1)

Data.parse返回的是NaN。哪个有趣的是无限期的数字。这是大多数实现在无法将字符串转换为日期时返回的内容。有些实现不能处理除RFC 1123兼容日期字符串之外的任何内容(这是规范所需的全部内容)。

编辑:对此回答的评论指出Date.parse不会返回NaN。但是规范说解析应该返回一个数字。给定一个无法解析为日期的字符串时,它应该返回多少个数字?它不能使用0或-1或其他一些这样的'流氓'值,因为这些从1970年1月1日开始有效的毫秒偏移.Mozilla和IE都返回NaN,这是一个非常明智的事情。

虽然规范并不排除将诸如“2008-28-10”之类的字符串解析为有效日期,但它并不需要它。我没有遇到任何超出规范要求的任何实现。因此,“2008年10月10日”是你最接近上面的字符串,它将正确解析。