但是这个代码更改时间从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,因此您需要将偏移量添加到您的时间 –
请您详细说明偏移量吗? –
是的,我写了一个答案 –