Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS和SQL Server之间的UTC时间戳不同_Javascript_Sql Server_Timestamp - Fatal编程技术网

Javascript JS和SQL Server之间的UTC时间戳不同

Javascript JS和SQL Server之间的UTC时间戳不同,javascript,sql-server,timestamp,Javascript,Sql Server,Timestamp,我使用时间戳作为应用程序的一部分,但问题是Javascript和SQL Server中同时创建的时间戳显示不同的值。它们在同一台计算机上运行,因此系统时钟不是问题 Javascript: var now = new Date(); console.log( new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), n

我使用时间戳作为应用程序的一部分,但问题是Javascript和SQL Server中同时创建的时间戳显示不同的值。它们在同一台计算机上运行,因此系统时钟不是问题

Javascript:

var now = new Date();

console.log( new Date(now.getUTCFullYear(),
        now.getUTCMonth(),
        now.getUTCDate(),
        now.getUTCHours(),
        now.getUTCMinutes(),
        now.getUTCSeconds()).valueOf() /1000);​
SQL Server 2012:

SELECT datediff(second,'1970-01-01 00:00:00.000',getutcdate())
是否datediff参数的第一部分不是在UTC中解释1970年1月1日

为了进行测试,我在JSFIDLE中执行javascript,并在ManagementStudio中对SQL进行rand,每次只需1-2秒

结果: Javascript:1339348299 SQL Server:1339384301


所以有36002秒或10小时的差异,这是我的时区偏移量。

好的,下面是两种获取时间戳的方法,它们将进行比较

Javascript

return Math.round(new Date().getTime()/1000.0);
SQL Server

SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())

根据你所展示的,我认为这两个系统中的一个时区设置不正确。您可以通过在SQL和javascript中使用相应的getdate函数而不是getUTCdate函数并进行比较来检查这一点。我的猜测是其中一个将返回与getUTCdate相同的结果,这表明这一个是要修复的。

两者之间的差异有多大?如何同时运行它们?并行?或者在运行它们之间需要一些时间吗?使用上述问题的答案更新了问题,字符串被解释为本地时间。但是,我不知道如何让SQL Server将其视为UTC。很可能是向字符串添加时区或设置某些区域设置参数。