在编写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(); 
}

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


当前回答

我对这个问题变得如此复杂感到惊讶。

这些都是相同的,它们的整数值都=== EPOCH time:D

console.log((new Date()).getTime() / 1000, new Date().valueOf() / 1000, (new Date() - new Date().getTimezoneOffset() * 60 * 1000) / 1000);

不相信我,结账: http://www.epochconverter.com/

其他回答

我想说明的是,new Date(). gettime()实际上返回一个UTC值,因此它是一种非常有用的存储和管理日期的方式,不受本地化时间的影响。

换句话说,不要使用所有的UTC javascript函数。相反,只需使用Date.getTime()。

更多关于解释的信息在这里: 如果javascript "(new Date()). gettime()"从2个不同的时区运行。

我使用以下方法:

Date.prototype.getUTCTime = function(){ 
  return this.getTime()-(this.getTimezoneOffset()*60000); 
};

一旦定义了这个方法,你可以这样做:

var utcTime = new Date().getUTCTime();

这将返回UTC时间戳:

var utc = new Date(new Date().toUTCString()).getTime();

我认为这是一个更好的解决办法

// UTC milliseconds
new Date(Date.now()+(new Date().getTimezoneOffset()*60000)).getTime()

// UTC seconds
new Date(Date.now()+(new Date().getTimezoneOffset()*60000)).getTime()/1000|0

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

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