UTC/ISO 8601格式的日期转换
我正在处理日期转换。 我日这2017-08-17 13:00:00
格式转换为2017-08-17T13:00:00Z
UTC/ISO 8601格式的日期转换
工作示例:
var from_date;
var sdate = new Date('2017-08-17 13:00:00');
var utcSDate = sdate.toISOString();
from_date = utcSDate.replace('.000', '');
console.log(from_date);
但是这个代码更改时间从13:00:00
到08:00:00
。为什么这是发生。任何想法 ? 或者有人给了我一个想法,将日期从我的输入转换为期望的输出,如上所述。
我建议只更换缺少的零件,不要使用Date
对象,在那里输入当地时间并获得祖鲁时间。
var date = '2017-08-17 13:00:00',
iso = date.replace(/(.{10}) (.{8})/, '$1T$2.000Z');
console.log(date);
console.log(iso);
如果将来更改输入日期格式,该怎么办?它如何将新的日期格式转换为UTC? –
您可以从。减去你的约会对象的偏移量:
var d = new Date();
var offsetInMinutes = d.getTimezoneOffset();
d.setMinutes(d.getMinutes() - offsetInMinutes);
d.toISOString()
但是这个代码更改时间从13:00:00至08:00:00。为什么这是 发生。任何想法 ?或者有人给我一个想法,将我的输入的日期从 转换为如上所述的期望输出。
字符串“2017年8月17日13:00:00”是不是由ECMA-262支持的格式,所以但它是分析是完全依赖于实现的,看到Why does Date.parse give incorrect results?如果被解析到一个日期,它可能被视为本地ISO 8601,即“2017-08-17T13:00:00”。 Safari会返回一个无效的日期,Firefox会将其解析为本地。
所以总是避免内置的解析器。
如果你只是想重新格式化字符串,这样做,作为一个字符串:
var s = '2017-08-17 13:00:00';
console.log(s.replace(' ','T') + 'Z');
但是,你刚才改变从什么时区的日期和时间为UTC + 0000它原来是在。如果你要考虑主机时区偏移,那么你应该分析字符串手动日期(库可以帮助,但不是必需的单一格式),然后用toISOString:
// Given a string in ISO 8601 like format, parse as local
function parseISOLocal(s) {
var b = s.split(/\D/);
return new Date(b[0], b[1]-1, b[2], (b[3] || 0),
(b[4] || 0), (b[5] || 0));
}
var s = '2017-08-17 13:00:00';
console.log(parseISOLocal(s).toISOString())
toISOString()方法转换为UTC,因此您需要将偏移量添加到您的时间 –
请您详细说明偏移量吗? –
是的,我写了一个答案 –