我试图在不更改时区的情况下将日期字符串转换为日期对象。这是标准行为:
new Date ("2014-10-24T00:00:00")
结果
Thu Oct 23 2014 19:00:00 GMT-0500 (Central Daylight Time)
我可以通过以分钟为单位获取偏移量,将其乘以60,000,然后将其添加到新的字符串日期来反转时区。
new Date(new Date("2014-10-24T00:00:00").getTime() + new Date().getTimezoneOffset()*60000)
这很有效,但似乎必须有一种更好的方法,不需要创建三个日期对象。
答案 0 :(得分:2)
不要使用Date构造函数解析字符串。它调用 Date.parse ,尽管ES5中的一个版本的ISO 8601字符串是标准化的,但它几乎完全依赖于实现。
我正在尝试将日期字符串转换为日期对象而不更改时区。
> new Date ("2014-10-24T00:00:00")
在不同的浏览器中,该字符串将被区别对待。如果您希望将其视为UTC,那么解析自己很简单:
function parseISOAsUTC(s) {
var b = s.split(/\D/);
return new Date(Date.UTC(b[0],--b[1],b[2],b[3],b[4],b[5],(b[6]||0)));
}
console.log(parseISOAsUTC('2014-10-24T00:00:00').toISOString()); // 2014-10-24T00:00:00.000Z
现在您可以确定在所有正在使用的浏览器中该字符串将被视为UTC(包括仍使用IE 8及更低版本的20%左右)。
另一方面,如果您希望将字符串视为本地时间,则只需删除 Date.UTC 部分:
function parseISOAsLocal(s) {
var b = s.split(/\D/);
return new Date(b[0],--b[1],b[2],b[3],b[4],b[5],(b[6]||0));
}
console.log(parseISOAsLocal('2014-10-24T00:00:00')); // Fri 24 Oct 2014 00:00:00 <local timezone>
答案 1 :(得分:0)
这是zerkms解决方案的实现。
new Date("2014-10-24T00:00:00".replace('T', ' '))
结果
Fri Oct 24 2014 00:00:00 GMT-0500 (Central Daylight Time)