javascript - 将 MS SQL 日期转换为 JavaScript 完整日期时间增加了 3 小时

标签 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(美国佛罗里达州夏令时间)

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/

相关文章:

javascript - 下拉列表 meteor javascript的onClick事件

javascript - Select2 - 无限滚动不加载带有远程数据的下一页

c# - C# double 可以表示哪些特定值,而 SQL Server float 不能?

python - 无法添加或更新子行: a foreign key constraint fails on a Django generated MySQL table

javascript - 根据先前对象数组中的共享属性创建新对象

javascript - 将多个 props cons 更改为 class

javascript - 其他组合框的组合框更改值

sql-server - 在 SQL Server 2008 R2 中获取时区

sql - 如何在 SQL Server 中查询此输出

c# - 如何为SQL Server和MySql制作数据访问层