我正在尝试将当前的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);
我做错了什么?
答案 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);