如何使用Javascript将UTC时间转换为正确的日期 - 时间格式?
这就是我想做的事情
var d = new Date("2014-01-01");
var new_d = d.toUTC(); // 1388534400000
var old_d = function(new_d){
// return "2014-01-01" // how can i get this?
}
现在如何,我可以获得orignal日期 - 2014-01-01来自1388534400000?
****另外,请注意,当我这样做时---新日期(1388534400000);它给的日期少了1天。 也就是说,它不是给 2014年1月1日,而是给出 2013年12月31日。但是,我想要2014年1月1日。****
有没有办法与toUTC()方法相反?
// _________对于那些toUTC()不起作用的人
" toUTC"方法适用于我的chrome控制台 见下面的屏幕截图
答案 0 :(得分:2)
当您将包含连字符的字符串传递给Date
构造函数时,它会将其视为UTC。如果你不打发时间,它会认为是午夜。如果您所在的时区落后于UTC(例如在大多数美洲地区),您将看到错误的本地时间转换。
这是我的chrome dev控制台的屏幕截图,所以你可以看到我的意思
如果我改为使用斜杠:
考虑使用moment.js - 它将接受一个格式参数,以帮助您避免此问题。
答案 1 :(得分:1)
尝试使用以下内容:
new Date(new_d);
答案 2 :(得分:1)
问题在于实例化日期的方式。 Javascript将连字符解释为utc日期,并将斜杠解释为本地日期。
给出标记解释的结果。
var utcDate = new Date('2014-01-01') // returns a UTC date
var localDate = new Date('2014/01/01'); // Returns local date
但是要将日期转换回起点字符串,您可以执行以下操作。
function toDateString(utcMillis){
var date = new Date(utcMillis);
d = date.getDate();
m = date.getMonth() +1;
y = date.getFullYear();
return y + '-' + addLeadingZero(m, 2) + '-' + addLeadingZero(d,2);
}
function addLeadingZero(n, length){
n = n+'';
if(n.length<length)
return addLeadingZero('0'+n, length--);
else
return n;
}
function toUTCDateString(utcMillis){
var date = new Date(utcMillis);
d = date.getUTCDate();
m = date.getUTCMonth() +1;
y = date.getUTCFullYear();
return y + '-' + addLeadingZero(m, 2) + '-' + addLeadingZero(d,2);
}
To play around with it, and see it for yourself, see this Fiddle: