【问题标题】:Differing UTC timestamp between JS and SQL ServerJS和SQL Server之间的不同UTC时间戳
【发布时间】:2012-06-13 23:26:22
【问题描述】:

我在我的应用程序中使用时间戳,但问题是在 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 中解释 01/01/1970 吗?

为了测试,我在 jsfiddle 中执行了 javascript,并在 management studio 中执行了 SQL,彼此在 1-2 秒内完成。

结果: Javascript:1339348299 SQL 服务器:1339384301

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

【问题讨论】:

  • 两者相差有多大?
  • 你是如何“同时”运行这些的?在平行下?或者运行它们之间是否有一段时间?
  • 用上述问题的答案更新了问题
  • 是的,字符串被解释为本地时间。但是,我不知道如何让 SQL Server 将其视为 UTC。很可能会在字符串中添加时区或设置一些语言环境参数。

标签: javascript sql-server timestamp


【解决方案1】:

好的,这里有两种获取时间戳的方法...

Javascript

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

SQL 服务器

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2012-02-28
      • 2015-08-03
      • 2013-02-23
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多