我正在进行日期转换。
我将此2017-08-17 13:00:00
日期格式转换为2017-08-17T13:00:00Z
工作示例:
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
。为什么会这样。任何的想法 ?
或者有人给我一个想法,将日期从我的输入转换为所需的输出,如上所述。
答案 0 :(得分:0)
我建议只更换缺少的部分,而不使用Date
对象,在那里输入当地时间并获得祖鲁时间。
var date = '2017-08-17 13:00:00',
iso = date.replace(/(.{10}) (.{8})/, '$1T$2.000Z');
console.log(date);
console.log(iso);
答案 1 :(得分:0)
您可以从日期对象中减去偏移量:
var d = new Date();
var offsetInMinutes = d.getTimezoneOffset();
d.setMinutes(d.getMinutes() - offsetInMinutes);
d.toISOString()
答案 2 :(得分:0)
但此代码从13:00:00到08:00:00更改时间。为什么会这样 happeining。任何的想法 ?或者有人给我一个转换日期的想法 我对上述所需输出的输入。
字符串“2017-08-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())