[英]Why can a date object be subtracted from another date object in JavaScript?
[英]Why is it that when I construct a JavaScript Date object with another Date object, the resulting Date object has the ms parts stripped?
如果我运行像这样的简单测试:
新日期(新日期(1050))。valueOf()
而不是1050,而是1000。这是在Firefox和Internet Explorer上发生的。
Google Chrome和Opera正确返回1000。
内部日期很可能已转换为字符串,然后由外部日期的构造函数进行了解析。
请注意,在所有浏览器中:
new Date(new Date(1050).toString()).valueOf()
返回1000,而:
new Date(new Date(1050).valueOf()).valueOf()
返回1050。
toString
的输出根本不包含任何毫秒信息。
也许其他人可以回答为什么某些浏览器在这种“隐式转换”方案中使用toString
而不是valueOf
。 我的猜测是该行为在ECMAScript规范中未定义-但我尚未检查。
马特(Matt)有您的答案,但可以在规范中进行追踪:
ToPrimitive(value)
new Date(value)
ToPrimitive(value)
在toString或parse步骤中,毫秒将被丢弃。 但是我无法想象将一个时间值转换为字符串,然后在一个表达式中转换回时间值的原因。
请注意,此解析意味着即使需要new Date('5/5/70')
,诸如new Date('5/5/70')
也会为1970年5月5日创建日期对象。 因此,如果要使用new Date(dateObject)
复制日期对象,则最好执行new Date(+dateObject)
将日期强制为其时间值,而不是让ECMA-262拥有其使用方式并使用字符串值。 尽管您极不可能需要复制0到99AD范围内的日期,但是很高兴知道如果尝试,它将可以正常工作。
尝试这个:
new Date(new Date(1050).getTime()).getTime()
在所有浏览器中,结果都将为“ 1050”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.