将MS SQL日期转换为JavaScript完整日期时间会增加3个小时

时间:2017-05-17 13:39:55

标签: javascript sql-server

我在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夏令时间)

我的问题是它为什么要增加三个小时?

2 个答案:

答案 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表示添加三小时。