我在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(FLE夏令时)
2017年5月2日星期二 03:00:00 GMT + 0300(FLE夏令时间)
我的问题是它为什么要增加三个小时?
答案 0 :(得分:2)
您可能正在将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)
答案 1 :(得分:1)
因为结果日期不在您的时区,请查看日期格式Mon May 01 2017 03:00:00 GMT+0300 (FLE Summer Time)
,GMT+0300
表示添加三小时。