today1 = new Date();
today2 = Date.parse("2008-28-10");
要比较这些我的时间(毫秒)值,我必须做以下事情,因为today2只是一个数字。为什么Date.parse不返回Date对象?
if (today1.getTime() == today2)
这是为什么?
today1 = new Date();
today2 = Date.parse("2008-28-10");
要比较这些我的时间(毫秒)值,我必须做以下事情,因为today2只是一个数字。为什么Date.parse不返回Date对象?
if (today1.getTime() == today2)
这是为什么?
要回答这个问题在标题:因为他们决定这样创建的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");
如果我没记错的话,Date会给你一个值,直到你创建Date对象的毫秒。因此,除非此代码在00:00:00:00在2008年8月10日完全运行,否则它们将不会相同。
只是一个补充:根据定义Date.parse()返回一个long值,表示Date的毫秒值,而不是Date对象本身。如果你想保持Date对象本身,只是建立它像这样:
var newDate = new Date();
newDate.setFullYear(2008,9,28);
更多参考退房:the Date class reference
这并没有回答原来的问题,其中 - 为什么是从Date.parse返回的类型,是一个整数,而不是Date?'。我也不知道这个答案,但拒绝提供不正确答案的机会作为替代 – belugabob 2008-10-28 09:29:41
就像我添加的那样,Date.parse by def返回毫秒值,请参阅我链接到的参考... – 2008-10-28 09:39:59
Data.parse返回的是NaN。其中fundementally是一个不确定的数字。这是大多数实现在无法将字符串转换为日期时返回的内容。有些实现不支持除符合日期字符串(这是规范要求的所有内容)的任何内容。
编辑:此答案的评论指出Date.parse不返回NaN。然而规范说解析应该返回一个数字。给定一个不能作为日期解析的字符串时,它应该返回什么数字?它不能使用0或者-1或者其他一些'流氓'值,因为1970年1月1日这个有效的毫秒偏移。Mozilla和IE都返回NaN,这是一个非常明智的做法。
尽管规范并不排除将字符串(如“2008-28-10”)解析为有效日期,但并不需要它。我还没有遇到过任何超出规范要求的实现。因此,“2008年10月10日”是最接近上面的字符串,将正确解析。
我无法代替语言设计人员回答,但可以使用Date构造函数中Date.parse或Date.UTC的结果来获取此类对象。
请注意,您的代码示例不正确:它不是有效的日期格式,不是ISO(yyyy-mm-dd)或IETF(星期一,1995年12月25日13:30:00 GMT + 0430)。所以你会得到一个NaN。 Date.parse只理解IETF格式,从我在MDC上读到的内容。
如果您需要比较两个日期,您可以比较.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());
这是什么问题?为什么你需要一步到位呢?有什么业务需要吗? – mohammedn 2011-02-08 02:33:25
我的问题是,我和其他人一样,会期望一个对象的解析方法返回该方法被调用的类型的对象。 – ProfK 2011-02-08 02:33:25