JavaScript中的UTC时间

时间:2012-05-21 01:27:37

标签: javascript

我正在尝试将当前的UTC日期存储在我的数据库中。我当地时间是晚上9点11分。这相当于UTC时间凌晨1点11分。当我查看我的数据库时,我注意到下午1点11分。正在写入。我糊涂了。为了在JavaScript中获取UTC时间,我使用以下代码:

var currentDate = new Date();
var utcDate = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds(), currentDate.getMilliseconds());
var result = new Date(utcDate);

我做错了什么?

3 个答案:

答案 0 :(得分:2)

搜索结果显示你可以这样做:

var now = new Date(),
    utcDate = new Date(
        now.getUTCFullYear(),
        now.getUTCMonth(),
        now.getUTCDate(),
        now.getUTCHours(),
        now.getUTCMinutes(), 
        now.getUTCSeconds()
    );

更短:

var utcDate = new Date(new Date().toUTCString().substr(0, 25));

How do you convert a JavaScript date to UTC?

这是一种常用的方式,而不是创建ISO8601字符串,以获取UTC的日期和时间。因为如果您使用字符串,那么您将无法使用Date()的每个本机方法,并且有些人可能会使用正则表达式,这比本机方式慢。

但是如果你将它存储在localstorage之类的某种数据库中,建议使用ISO8601字符串,因为它还可以节省时区偏移量,但在你的情况下,每个date都会变成UTC,所以时区真的没关系。

答案 1 :(得分:2)

如果您想要本地日期对象的UTC时间,请使用UTC方法获取它。所有javascript日期对象都是本地日期。

var date = new Date(); // date object in local timezone

如果您想要UTC时间,可以尝试依赖于实现的toUTCString方法:

var UTCstring = date.toUTCString();

但我不相信。如果您想要UTC时间的ISO8601字符串(大多数数据库需要),那么:

var isoDate = date.getUTCFullYear() + '-' +
              addZ((date.getUTCMonth()) + 1) + '-' +
              addZ(date.getUTCDate()) + 'T' +
              addZ(date.getUTCHours()) + ':' +
              addZ(date.getUTCMinutes()) + ':' +
              addZ(date.getUTCSeconds()) + 'Z';

addZ函数是:

function addZ(n) {
  return (n<10? '0' : '') + n;
}

修改以适应。

修改

要调整本地日期对象以显示与UTC相同的时间,只需添加时区偏移:

function adjustToUTC(d) {
  d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); 
  return d;
}

alert(adjustToUTC(new Date())); // shows UTC time but will display local offset

注意以上事项。如果你说UTC + 5小时,那么它将提前5小时返回一个日期对象,但仍显示“UTC + 5”

将UTC ISO8601字符串转换为本地日期对象的函数:

function fromUTCISOString(s) {
  var b = s.split(/[-T:\.Z]/i);
  var n= new Date(Date.UTC(b[0],b[1]-1,b[2],b[3],b[4],b[5]));
  return n;
}

alert(fromUTCISOString('2012-05-21T14:32:12Z'));  // local time displayed

答案 2 :(得分:0)

var now = new Date();
var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);