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

时间:2017-06-22 03:46:33

标签: javascript date toisostring

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

这是插入日期时间

    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时的时间变化?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

这是插入日期时间阻止您的slice正在剥离时区部分(Z输出结束时的toISOString):< / p>

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

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

  

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

时间“更改”,因为当您调用toISOString时,它会转换为UTC。

如果您想在您的时区获得ISO日期,您应该看看这两个问题:How to ISO 8601 format a Date with Timezone Offset in JavaScript?How to format a JavaScript date

答案 1 :(得分:2)

ISO时间是免费的时区。如果您将这四个小时添加到日期中的16个小时,您将获得时区GMT-04:00,您将获得20

答案 2 :(得分:0)

只要其他人遇到相同的问题并访问此问题。

这里有一个解决方案: https://stackoverflow.com/a/28149561