我在 MS SQL 表中有日期类型的列,我需要在 JavaScript 中将其转换为完整的日期和时间。这是我的代码:
$.ajax({
type: "POST",
url: "http://localhost:8080/dates",
data: {},
dataType: "JSON",
success: function(data) {
holidays = new Array();
for (var i of data[0])
{
date = new Date(i.holiday_date);
console.log(date);
holidays.push(date);
}
}
});
结果是:
2017 年 5 月 1 日星期一 03:00:00 GMT+0300(美国佛罗里达州夏令时间)
2017 年 5 月 2 日星期二 03:00:00 GMT+0300(美国佛罗里达州夏令时间)
我的问题是为什么要增加三个小时?
最佳答案
您可能将 ISO 8601 日期 YYYY-MM-DD
传递给 Date 对象,这些日期被视为 UTC 时间。因此,当转换为本地时间时,会增加 3 小时。如果您传递 unix 时间戳,也会发生同样的情况。
现在,您不应该只是在某处添加或删除 3 小时来纠正它,因为夏令时每年会中断两次。
最好的方法是使用完整的 ISO 8601 时间戳 YYYY-MM-DDTHH:mm:ss.sssZ
,例如2017-05-02T00:00:00+03:00
,或为 Date 对象构造函数使用单独的参数,因为在这种情况下,这些参数将被视为本地时间,而不是 UTC:
new Date(year, month, day);
更多关于日期对象的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
据我所知,您可以像这样从 SQL Server 中获取完整的 ISO 8601 时间戳:
CONVERT(VARCHAR(24), GETDATE(), 127)
关于javascript - 将 MS SQL 日期转换为 JavaScript 完整日期时间增加了 3 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44026561/