【发布时间】:2017-03-06 13:46:11
【问题描述】:
当我检测到一个奇怪的行为时,所有问题都开始了:我有一个长数字,表示“自 0001/01/01 以来的毫秒数”,然后在 C# 日期时间中,当我使用 AddMilliseconds 时得到一个不同的日期从一小时开始返回的值,在一小时内不同。例如。
new DateTime().AddMilliseconds(63613091700000); => {10/26/2016 3:15:00 PM}
moment([1]).add(63613091700000).toDate() => Wed Oct 26 2016 16:15:00 GMT-0400 (Eastern Daylight Time)
在 C# 中获取 15:15h 和当前 16:15!!!
这让我大吃一惊,所以我搜索了错误,然后我找到了:
moment([1]).toDate() => Mon Jan 01 1 00:00:00 GMT-0500 (Eastern Standard Time)
问题是,当我从自定义日期 (moment([1])) 创建时刻时,它使用 GMT-0500 (Eastern Standard Time),但是当应用时刻 add 方法时,它返回 GMT-0400 (Eastern Daylight Time)!还要检查通过moment() 创建时刻日期或使用javascript 日期new Date() 是否也使用GMT-0400 (Eastern Daylight Time)。这就是问题所在。
我的问题是,为什么会发生这种情况?有问题吗?
【问题讨论】:
-
发生这种情况是因为这是在您运行 javascript 的系统上设置的时区。另外,回到耶稣出生的时候,似乎是一件很奇怪的事情,通常 javascript 从 1970 年开始计数,而不是 0001。
-
以 UTC 存储和操作所有日期。在将日期时间放入 UI 之前,您对日期时间所做的最后一件事是使用用户的本地时区/DST 设置对其进行格式化,在从 UI 接收到日期时间后,您对日期时间所做的第一件事是将其转换为 UTC。跨度>
-
@adeneo 很确定耶稣直到 0001/12/25 才出生。时间充裕。
-
@EdPlunkett 说了什么。一直是UTC,否则跟踪时区/时间跨度会让你头疼。
-
.Net 默认使用 0001,我对此没有任何问题。我在这里说的不是要存储日期时间,而是关于奇怪的时刻行为,我认为它不应该使用两个不同的时间,我认为它应该是随之而来的,并且使用相同的用户时间。
标签: javascript c# date datetime momentjs