我正在以两种不同的格式在数据库中插入日期。
这是插入日期时间
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时的时间变化?我该如何解决这个问题?
答案 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