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

Javascript 为什么Date.parse不返回日期对象?,javascript,Javascript,为了比较这些时间(毫秒)值,我必须做以下操作,因为今天2只是一个数字 today1 = new Date(); today2 = Date.parse("2008-28-10"); 这是为什么?如果我没记错的话,Date会给你一个值,精确到你创建Date对象的毫秒。因此,除非这段代码在2008-28-10的00:00:00:000运行,否则它们将不一样 只需添加一项:Date.parse()根据定义返回一个长值,表示日期的毫秒值,而不是日期对象本身。如果要保存日期对象本身,只需按如下方式构建:

为了比较这些时间(毫秒)值,我必须做以下操作,因为今天2只是一个数字

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

这是为什么?

如果我没记错的话,Date会给你一个值,精确到你创建Date对象的毫秒。因此,除非这段代码在2008-28-10的00:00:00:000运行,否则它们将不一样

只需添加一项:Date.parse()根据定义返回一个长值,表示日期的毫秒值,而不是日期对象本身。如果要保存日期对象本身,只需按如下方式构建:

if (today1.getTime() == today2)

有关更多参考信息,请查看:

以回答标题中的问题:因为他们在创建JavaScript语言时决定这样做。可能是因为Java的
Java.util.Date
parse函数也在做同样的事情,他们想模仿它的行为,让语言更加熟悉


要回答课文中的问题。。。使用此构造可以获取两个日期对象:

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

编辑:一个简单的

var today2 = new Date(Date.parse("2008-10-28"));
同样有效


注意:旧的Internet Explorer版本(9之前的任何版本)不理解日期字符串中的破折号。但它可以使用斜杠:

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

斜杠似乎被新旧浏览器普遍理解。

Data.parse返回的是NaN。基本上是一个不确定的数字。这是大多数实现在无法将字符串转换为日期时返回的结果。有些实现只处理兼容的日期字符串(这是规范所要求的)

编辑:对此答案的注释表明Date.parse不返回NaN。然而,规范说parse应该返回一个数字。当给定一个不能解析为日期的字符串时,它应该返回什么数字?它不能使用0或-1或其他类似的“rogue”值,因为这些值是1970年1月1日起的有效毫秒偏移量。Mozilla和IE都返回NaN,这是一件非常明智的事情


虽然规范不排除将字符串(如“2008-28-10”)解析为有效日期,但它不需要解析。我没有遇到任何实现比规范中要求的做更多的事情。因此,“2008年10月10日”是最接近上面正确解析的字符串。

我无法代替语言设计器回答,但您可以在日期构造函数中使用Date.parse或Date.UTC的结果来获得这样的对象

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

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

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

这并没有回答最初的问题,问题的措辞是“为什么类型是从Date.parse返回的,是整数,而不是日期?”。我也不知道这个问题的答案,但拒绝提供错误答案的机会,作为替代。如我添加的,Date.parse by def返回毫秒值,请参阅我链接到的引用…Date.parse肯定不会返回NaN。请尝试。如题中所示,将其命名为“2008-28-10”,并使用isNaN进行测试。对不起,我正在进行“问题框”编码,并且使用了错误的日期格式。您可以指出我的特定Date.parse()返回了一个Nan,但是。嗯。。。我想是的。但是,我建议您编辑您的问题以使用有效的日期字符串。然后我可以删除这个答案,这样这个问题就可以继续讨论这个话题了。这里面有什么问题?为什么你需要一步到位?是否有业务需要?我的问题是,我和其他人都希望对象上的解析方法返回该方法调用的对象类型。中间是月份,第三是日期?@Derek:是的。这是唯一有意义的日期符号。
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());