22

我以两种不同的格式在数据库中插入日期。

这是作为日期时间插入的

    var mydate;
    mydate = new Date();
    document.getElementById('clockinhour').value = mydate.toISOString().slice(0, 19).replace('T', ' ');

输出 A

2017-06-21 20:14:31 

这是插入为 varchar :

document.getElementById('clocked_in_time').value = Date();

输出 B

Wed Jun 21 2017 16:14:31 GMT-0400 (Eastern Standard Time)

输出 B 是正确的时间,但我需要显示输出 A。是什么导致转换为 ISOString 时时间发生变化?我怎样才能解决这个问题?

4

2 回答 2

11

在您的这是作为 Datetime块插入时,您slice正在剥离时区部分(输出Z末尾的toISOString):

document.getElementById('clockinhour').value = mydate.toISOString().slice(0, 19).replace('T', ' ');

正如@RobG 在评论部分指出的那样,toISOString应该始终以 UTC(Z+00:00)返回日期。

RTFM : "时区 [offset] 始终为 UTC,由后缀 Z 表示",

时间“改变”,因为它在您调用时转换为 UTC toISOString

如果你想在你的时区获取 ISO 日期,你应该看看这两个问题:How to ISO 8601 format a Date with Timezone Offset in JavaScript? 以及如何格式化 JavaScript 日期

于 2017-06-22T04:11:10.000 回答
5

ISO 时间不受时区限制。你会注意到你有时区 GMT-04:00 如果你将这四个小时添加到日期中的 16 小时,你会得到 20

于 2017-06-22T03:52:46.583 回答