Javascript转换时区问题
Javascript convert timezone issue
我在当前时区转换日期时间时遇到问题。
我从服务器收到此日期字符串,格式为"2015-10-09T08:00:00",这是中心时间,但当我在GMT+5中使用新日期(strDate)转换此日期时间时,它会在下面返回我,这是不正确的。
var dateObj = '2015-10-09T08:00:00';
new Date(dateObj); // return me below
Fri Oct 09 2015 13:00:00 GMT+0500 (PKT)
我使用的另一种方法是通过添加时区偏移量进行转换,并返回正确的结果,但当夏令时激活时,却公然失败了。
dateObj2 = '2015-10-09T08:00:00'+'-06:00';
new Date(dateObj2)// return me below
Fri Oct 09 2015 19:00:00 GMT+0500 (PKT)
如果有人帮助我或建议我使用JavaScript进行夏时制时区转换的有效方法,我将不胜感激?
谢谢。
请注意,您编写的代码的行为在浏览器之间有所不同:
new Date('2015-10-09T08:00:00').toString()
// "Fri Oct 09 2015 10:00:00 GMT+0200 (Romance Daylight Time)" // Chrome 46 on Windows 8.1
// "Fri Oct 09 2015 08:00:00 GMT+0200 (Romance Daylight Time)" // Firefox 41 on Windows 8.1
// "Fri Oct 09 2015 08:00:00 GMT+0200 (Romance Daylight Time)" // IE11 on Windows 8.1
// "Fri Oct 9 08:00:00 UTC+0200 2015" // IE10 emulation
// "Fri Oct 9 10:00:00 UTC+0200 2015" // IE9 emulation
// on IE8 it even returns NaN!
(我的时区是巴黎)
因此,Firefox和IE将提供的日期解释为指定的日期,就好像它在用户的本地时区中一样,而Chrome将其解释为UTC,当打印时,它会转换为用户的时区。
检查MDN文档,这是由于EcmaScript 5和EcmaScript 6(2015)规范的差异。Chrome似乎遵循ES5规范,而Firefox和IE11则遵循ES6规范。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#ECMAScript_5_ISO-8601_format_support(强调矿)
日期时间字符串可以是ISO 8601格式。例如"2011-10-10"(仅日期)或"2011-10-10T14:48:00"(日期和时间)可以被传递和解析UTC时区用于解释参数不包含时区信息的ISO 8601格式(注意ECMAScript 2015指定了没有时间的日期时间字符串区域将被视为本地,而不是UTC)
不幸的是,JavaScript中的Date
对象以其怪癖和跨浏览器不一致而闻名,尤其是在不明确的输入上。
我在这里写的如何利用moment.js
或本地Intl
API来确保您的日期不会转换为用户的时区(秘诀是使用UTC操作方法)。
通常,最好始终指定时间和UTC偏移量,或者仅指定UTC时间戳,以确保您的输入是明确的。
回到您的示例,您可以使用以下代码:
moment('2015-10-09T08:00:00-06:00')
.utcOffset(+300).locale('en_gb').format("LLLL")
// "Friday, 9 October 2015 19:00" cross-browser
其中您说"这是UTC-0600中的日期,请将其转换并打印为UTC+0500(+300分钟)"。然后,您可以传递要打印的区域设置(即语言+区域性特定设置,例如en_gb
使用24小时时钟,而en_us
使用12小时时钟),并使用moment.js支持的多种日期格式。
- javascript日期时区问题
- NetSuite RESTlet,提交日期/时区问题
- 使用 REST API 和 JS 时的时区问题
- Javascript 日期对象时区问题 - 不同的时区
- PHP 中的用户时区问题修复
- 时区的JavaScript日期问题
- 时区偏移的 D3 日期分析问题
- 完整日历日单击并删除了时区更改的事件日期问题
- Javascript转换时区问题
- Javascript到PHP的日期转换在时区中丢失.也许mysql保存问题
- 当javascript中的系统首选项和用户首选项不同时,会出现时区转换问题
- 时间戳日期时区问题在dojo
- 烦人的javascript时区调整问题
- 角时区CDT/CST问题
- 节点+ Mongodb + ISODate +时区问题
- 更改GMT(时区)时出现问题
- 来自Windows机器的date对象——时区问题
- Date.Parse()的时区问题
- Javascript Date问题返回比设置的时区少1天
- 在Electron中加载时区库时出现问题