如何在 JavaScript 中获取 UTC 时间戳?

2022-08-30 01:12:05

在编写 Web 应用程序时,将数据库中的所有日期时间存储(服务器端)作为 UTC 时间戳是有意义的。

当我注意到你在JavaScript中无法在时区操作方面做很多事情时,我感到惊讶。

我稍微扩展了 Date 对象。这个函数有意义吗?基本上,每次我向服务器发送任何内容时,它都会是一个用这个函数格式化的时间戳......

你能看出这里有什么大问题吗?或者从不同的角度找到解决方案?

Date.prototype.getUTCTime = function(){ 
  return new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime(); 
}

这对我来说似乎有点复杂。我也不太确定性能。


答案 1
  1. 以这种方式构造的日期使用本地时区,使构造的日期不正确。设置某个日期对象的时区是从包含时区的日期字符串构造它。(我在较旧的Android浏览器中使用它时遇到问题。

  2. 请注意,返回毫秒,而不是普通秒。getTime()

对于 UTC/Unix 时间戳,以下内容应该就足够了:

Math.floor((new Date()).getTime() / 1000)

它将把当前时区偏移量计入结果中。对于字符串表示,David Ellis的答案有效。

澄清:

new Date(Y, M, D, h, m, s)

该输入被视为本地时间。如果传入 UTC 时间,则结果将有所不同。观察(我现在在格林威治标准时间+02:00,现在是07:50):

> var d1 = new Date();
> d1.toUTCString();
"Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
> Math.floor(d1.getTime()/ 1000)
1332049834 

> var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
> d2.toUTCString();
"Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
> Math.floor(d2.getTime()/ 1000)
1332042634

另请注意,不能替代 。这是因为返回月份中的某一天;而 返回星期几getUTCDate()getUTCDay()getUTCDate()getUTCDay()


答案 2

以传统格式获取UTC时间的最简单方法如下:

> new Date().toISOString()
"2016-06-03T23:15:33.008Z"

如果需要 EPOC 时间戳,请将日期传递给 Date.parse 方法

> Date.parse(new Date)
1641241000000
> Date.parse('2022-01-03T20:18:05.833Z')
1641241085833

或者,您可以使用 + 对从 Date 到 Int 的类型转换

> +new Date 
1641921156671

EPOC 时间戳(以秒为单位)。

> parseInt(Date.parse('2022-01-03T20:18:05.833Z') / 1000)
1641241085
> parseInt(new Date / 1000)
1643302523