是某种溢出吗?
phantomjs> new Date("1400-03-01T00:00:00.000Z")
"1400-03-01T00:00:00.000Z"
phantomjs> new Date("1400-02-28T20:59:59.000Z")
"1400-02-27T20:59:59.000Z"
您会期望什么:
>>(new Date("1400-03-01T00:00:00.000Z")).toISOString()
"1400-03-01T00:00:00.000Z"
>>(new Date("1400-02-28T20:59:59.000Z")).toISOString()
"1400-02-28T20:59:59.000Z"
当解析日期在1400年2月28日到1400年3月1日之间时,显然存在24小时的间隔。
Phantomjs无论如何都已经过时了,但是...当我们尝试升级到无头Chrome时,我们的传统测试失败了...
答案 0 :(得分:1)
PhantomJS使用的Qt WebKit版本是Qt的maintained independently。
您使用的日期格式是ISO-8601日期和时间格式的一部分。 [related]
PhantomJS使用的Qt WebKit版本具有一个功能,该功能可以解析ECMA-262-5, section 15.9.1.15中定义的格式的日期(类似于RFC 3339 / ISO 8601:YYYY-MM-DDTHH:mm:ss[.sss]Z
)。 / p>
在source code中,我们可以看到用于解析这些类型的日期的函数称为:
double parseES5DateFromNullTerminatedCharacters(const char* dateString)
自2014年7月27日以来,PhantomJS存储库中包含此功能的文件从未updated,而官方文件是2017年10月13日之前的updated。
似乎与处理leap年有关的逻辑上存在问题。
这是来自官方qtwebkit存储库(左)和PhantomJS qtwebkit存储库(右)的最新版本之间的comparison of DateMath.cpp。