如何修复MS SQL Server 2008R2/2012和Javascript之间的日期差异

How to fix dates discrepancy between MS SQL Server 2008R2/2012 and Javascript

本文关键字:之间 Javascript 日期 2012 MS 何修复 SQL Server 2008R2      更新时间:2023-09-26

我们将日期存储在数据库中,作为日期和"1970年1月1日"之间的差异(以分钟为单位)。

以下是来自同一台机器的结果:

--TSQL (MS Sql Server 2008R2)
SELECT DATEADD(minute, 22572765, '1-Jan-1970'); -- gets 1-Dec-2012 12:45:00.000
//JS (Chrome) - assume minDate = 1-Jan-1970
new Date(minDate.getTime() + (22572765 * 60 * 1000)) -- gets me 1-Jan-2013 12:45:00

解决差异的最佳方法是什么?

在我看来,您的minDate是错误的,因为这是:

new Date((new Date(1970, 0, 1)).getTime() + (22572765 * 60 * 1000))

给我2012年12月1日12:45:00.000 GMT。

在JavaScript中,month的值是从零开始的,所以如果您使用new Date(1970, 1, 1)构建minDate,这就是为什么您需要一个月的时间。


还要注意的是,除非您使用事物的UTC变体(getUTCYear等),否则JavaScript日期将在输出时为您提供日期的本地时区版本(您构建日期的方式是正确的,而不是minDate,只是在输出时需要小心)。