Typescript: 从字符串日期创建新日期会增加21秒的结果

创建于 2019-07-05  ·  4评论  ·  资料来源: microsoft/TypeScript


TypeScript版本: 3.5.2


搜索条件: 3.5.2 date 21秒new Date()new Date字符串格林威治法国

从字符串格式日期创建新日期(1911年3月10日之前或之前)会为结果日期增加21秒。


var firstDate = new Date("1900-01-01T00:00:00.000Z").toString()
// Mon Jan 01 1900 00:09:21 GMT+0009 (Central European Standard Time)

var secondDate = new Date(firstDate).toString()
// Mon Jan 01 1900 00:09:42 GMT+0009 (Central European Standard Time)

var thirdDate = new Date(secondDate).toString()
// Mon Jan 01 1900 00:10:03 GMT+0009 (Central European Standard Time)

预期行为:
应该返回1900年1月1日星期一格林尼治标准时间+0009(中欧标准时间)

实际行为:
每次调用新的Date(string)都会增加21秒。

游乐场链接:

相关问题:

Question

最有用的评论

\

@ j-oliveras取决于您的编译器选项:

temporalAnomaly

<\ /讽刺>

所有4条评论

在运行时,打字稿怎么会出现错误?

接下来,将toString小写。 通过Node(10.15.3),Firefox(67.0.4)devtools控制台和Chrome(75)devtools控制台,它可以按预期工作(来自节点输出的注释):

var firstDate = new Date("1900-01-01T00:00:00.000Z").toString()
// Mon Jan 01 1900 01:00:00 GMT+0100 (GMT+01:00)

var secondDate = new Date(firstDate).toString()
// Mon Jan 01 1900 01:00:00 GMT+0100 (GMT+01:00)

var thirdDate = new Date(secondDate).toString()
// Mon Jan 01 1900 01:00:00 GMT+0100 (GMT+01:00)

\

@ j-oliveras取决于您的编译器选项:

temporalAnomaly

<\ /讽刺>

说真的,@ ruslan-volkov,此问题与TypeScript编译器无关。 只要编译器能够生成正确的JavaScript输出代码,TypeScript就没有错。

您所看到的很可能是特定JavaScript运行时引擎(或可能是多个引擎)中的错误,可能与1911年法国的日期计算有关,当时法国比GMT提前9分21秒。 但这与TypeScript无关。

考虑创建Date对象所遇到的所有问题,我也不确定JS运行时世界中是否有人会对此大为关注:

注意:由于浏览器的差异和不一致,强烈建议不要使用Date构造函数来解析日期字符串。

祝好运!

感谢您的回答和您的时间,我的天哪!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

wmaurer picture wmaurer  ·  3评论

Roam-Cooper picture Roam-Cooper  ·  3评论

uber5001 picture uber5001  ·  3评论

CyrusNajmabadi picture CyrusNajmabadi  ·  3评论

Antony-Jones picture Antony-Jones  ·  3评论