Why converting new.Date() .toISOString() changes the time?

天大地大妈咪最大 提交于 2019-12-21 07:29:23

问题


I'm inserting a date in a database in two different format.

this is inserting as Datetime

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

Output A

2017-06-21 20:14:31 

this is inserting as varchar :

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

Output B

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

Output B is the correct time but I need to display output A. What causes the time to change when converted toISOString? How can I fix this?


回答1:


In your this is inserting as Datetime block your slice are stripping of the timezone part (the Z at the end of toISOString output):

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

As pointed out by @RobG in the comments section, toISOString should always return the date in UTC (Z or +00:00).

RTFM: "The time zone [offset] is always UTC, denoted by the suffix Z",

The time "changes" because it is converted to UTC when you calls toISOString.

If you want to get ISO date in your timezone, you should take a look in these two questions: How to ISO 8601 format a Date with Timezone Offset in JavaScript? and How to format a JavaScript date




回答2:


ISO time is time zone free. You'll notice with b you have time zone GMT-04:00 if you add those four hours to the 16 hours in the Date, you get 20




回答3:


Just if someone else face the same issue and visit this question.

There is a solution here: https://stackoverflow.com/a/28149561



来源:https://stackoverflow.com/questions/44689770/why-converting-new-date-toisostring-changes-the-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!