JavaScript在不更改时区的情况下从字符串创建新日期
JavaScript creating new Date from a string without changing timezone
我试图在不更改时区的情况下将日期字符串转换为日期对象。以下是标准行为:
new Date ("2014-10-24T00:00:00")
结果
Thu Oct 23 2014 19:00:00 GMT-0500 (Central Daylight Time)
我可以通过获得以分钟为单位的偏移量,将其乘以60000,然后将其添加到新的字符串日期中来反转时区。
new Date(new Date("2014-10-24T00:00:00").getTime() + new Date().getTimezoneOffset()*60000)
这是可行的,但似乎必须有一种更好的方法,不需要创建三个日期对象。
不要使用Date构造函数解析字符串。它调用Date.parse,尽管它在ES5中被标准化为ISO8601字符串的一个版本,但它仍然几乎完全依赖于实现。
我正在尝试在不更改时区的情况下将日期字符串转换为日期对象。
> 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(包括仍在使用IE8及更低版本的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>
这里是zerkms解决方案的一个实现。
new Date("2014-10-24T00:00:00".replace('T', ' '))
结果
Fri Oct 24 2014 00:00:00 GMT-0500 (Central Daylight Time)
相关文章:
- 它将返回什么新日期(DateObject)
- 如何从Angularjs中的新日期获取日期格式
- PHP和javascript:以json形式传递新日期
- 参数为IE11的新日期
- 从上一个日期创建日期并添加到该日期
- 为什么将新日期设置为今天会返回昨天
- 带有 ISO 8061 日期的新日期()根据时区创建日期
- 创建新日期实例时的奇怪行为
- Jquery:为新数据创建寻呼机(next-prev按钮)
- 如何在新日期忽略时区()
- javascript创建减去一天的新日期
- 用数字创建日期(新日期(2012, 03, ..) 给出错误的月份(+1)
- JavaScript 新日期创建错误
- 创建新日期对象时不一致
- 在JavaScript中创建新日期时的奇怪行为
- JavaScript在不更改时区的情况下从字符串创建新日期
- 使用Javascript创建新日期会在IE11中显示无效日期
- 使用momentJS与使用Javascript的new date()创建新日期之间的区别是什么?
- 如何创建一个for循环,该循环使用javascript返回一个月中剩余天数的一组新日期对象
- 为什么JavaScript在用不同日期的年/月/日创建新日期时会丢失一天?