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?
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
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
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