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

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

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

这里有什么主要问题吗?或者换个角度解决?

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

我只是觉得有点费解。我对表现也不是很确定。


当前回答

一旦你这样做了

new Date(dateString).getTime() / 1000

它已经是UTC时间戳了

   const getUnixTimeUtc = (dateString = new Date()) => Math.round(new Date(dateString).getTime() / 1000)

我在https://www.unixtimestamp.com/index.php上进行了测试

其他回答

只做:

const time = new Date().getTime();

MDN指出:

Date.prototype.getTime () 返回指定日期的数值,该数值为自1970年1月1日00:00:00 UTC以来的毫秒数。(之前的时间返回负值。)

如果你想要一行,UTC Unix时间戳可以在JavaScript中创建:

var currentUnixTimestap = ~~(+new Date() / 1000);

这将考虑到系统的时区。它基本上是以秒为单位的从epoch开始的时间。

工作原理:

创建日期对象:new date()。 通过在对象创建之前添加一元+将其转换为时间戳整数来转换为时间戳。: +new Date()。 将毫秒转换为秒:+new Date() / 1000 使用双波浪号将值舍入为整数。: ~~(+new Date())

你也可以使用getTimezoneOffset和getTime,

x =新日期() var utccos = (x.getTime() + x. gettimezone胶印()*60*1000)/1000; 游戏机。log (UTCseconds”、“UTCseconds)

我想这就是你所期待的……

var currTimestamp = Date.now(), //1482905176396
    utcDateString = (new Date(currTimestamp)).toUTCString(); //"Wed, 28 Dec 2016 06:06:50 GMT"

Now,

new Date(utcDateString).getTime(); //This will give you UTC Timestamp in JavaScript

因为new Date().toUTCString()返回一个像“Wed, 11 Oct 2017 09:24:41 GMT”这样的字符串,你可以将最后3个字符切片并将切片后的字符串传递给new Date():

new Date()
// Wed Oct 11 2017 11:34:33 GMT+0200 (CEST)

new Date(new Date().toUTCString().slice(0, -3))
// Wed Oct 11 2017 09:34:33 GMT+0200 (CEST)