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