为什么转换new.Date().toISOString()会改变时间?

Seb*_*ham 12 javascript date toisostring

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

这是作为Datetime插入

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

输出A.

2017-06-21 20:14:31 
Run Code Online (Sandbox Code Playgroud)

这是作为varchar插入:

document.getElementById('clocked_in_time').value = Date();
Run Code Online (Sandbox Code Playgroud)

输出B.

Wed Jun 21 2017 16:14:31 GMT-0400 (Eastern Standard Time)
Run Code Online (Sandbox Code Playgroud)

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

Din*_*nei 7

在你的这个插入日期时间块你slice正在剥离时区部分(ZtoISOString输出的末尾):

document.getElementById('clockinhour').value = mydate.toISOString().slice(0, 19).replace('T', ' ');
Run Code Online (Sandbox Code Playgroud)

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

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

时间"更改",因为它在您调用时会转换为UTC toISOString.

如果您想在您的时区获得ISO日期,您应该看看这两个问题:如何在JavaScript中使用ISO 8601格式化带有时区偏移的日期?以及如何格式化JavaScript日期


Con*_*Del 5

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