Javascript Intl.DateTimeFormat()返回的UTC日期不正确
我在跟踪 我正在进行一项测试,其中:Javascript Intl.DateTimeFormat()返回的UTC日期不正确,javascript,datetime,time,datetime-format,Javascript,Datetime,Time,Datetime Format,我在跟踪 我正在进行一项测试,其中: const text = Utils.dateToText('2019-05-18T16:00:00Z', 'en-GB') expect(text).to.equal('Saturday, May 18, 2019, 16:00') 和一个函数: dateToText(dateTime: string, lang: string[5]): string { const date = new Date(dateTime) let format =
const text = Utils.dateToText('2019-05-18T16:00:00Z', 'en-GB')
expect(text).to.equal('Saturday, May 18, 2019, 16:00')
和一个函数:
dateToText(dateTime: string, lang: string[5]): string {
const date = new Date(dateTime)
let format = {
timeZone: 'Europe/London',
day: '2-digit',
month: 'long',
year: 'numeric',
weekday: 'long',
hour: '2-digit',
minute: '2-digit',
hour12: false
}
return new Intl.DateTimeFormat(lang, format).format(date)
}
测试失败,原因是:
断言错误:预计2019年5月18日星期六下午17:00等于2019年5月18日星期六下午16:00(+预计-实际)
因此,根据日期规范,Z
是祖鲁的象征,祖鲁是格林威治时区。我希望欧洲/伦敦的2019-05-18T16:00:00Z
仍然是下午4点(16:00)。重要的是,我要以ISO格式准确地传递日期
当我从日期末尾(ISO规范允许)移除Z
时,我得到了正确的结果(16:00)。但是,我想保留Zulu
时间指示器,因为这是我的数据库当前存储日期时间的方式
在我的本地机器上,我在欧洲/伦敦时区。在我的另一台机器上,测试正确通过,但是在Gitlab CI上它抛出了一个错误。这显然与时区有关
还有什么可以解释我为什么会出现这种差异或我遗漏了什么吗?从3月到10月以及这段时间内的日期,如果使用“欧洲/伦敦”时区显示,它们将比格林威治标准时间提前1小时
因此Utils.dateToText('2019-05-18T16:00:00Z','en GB')
(夏季)正确返回
2019年5月18日星期六17:00
而Utils.dateToText('2019-01-18T16:00:00Z','en GB')
(标准时间)正确返回
2019年1月18日星期五16:00
请注意时间组件中的差异。所以测试失败了。是的,所以我假设测试中有两种情况:一种是夏季时间,另一种是标准时间。我找不到一个名为
Europe/Greenwich
的区域来获得始终相同的结果-但似乎我不应该显示UTC,而是显示用户当时定义的区域。是2个测试案例听起来合理。是的,如果您总是希望得到相同的结果,那么它应该是UTC,但是用户时区可能更相关,这取决于您的应用程序是以UTC还是以浏览器时区显示时间。这取决于需求。实际上,某些数据(如日志数据)在UTC中可能更好
-Saturday, May 18, 2019, 17:00
+Saturday, May 18, 2019, 16:00