UTC时间在JavaScript中
我正在尝试获取当前的UTC日期以存储在我的数据库中。 我的当地时间是下午9点11分,这相当于上午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);
我究竟做错了什么?
搜索结果发现你可以这样做:
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));
如何将JavaScript日期转换为UTC?
这是一种常用的方法,而不是创建一个ISO8601字符串,以获取UTC的日期和时间。 因为如果你使用了一个字符串,那么你将无法使用Date()
每一个本地方法,并且有些人可能会使用regex,这比本地方法慢。
但是,如果您将其存储在某种数据库(如localstorage
,建议使用ISO8601字符串,因为它也可以节省时区偏移量,但在您的情况下,每个date
都转换为UTC,因此时区确实无关紧要。
如果您想要本地日期对象的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
链接地址: http://www.djcxy.com/p/59577.html