【问题标题】:Convert date from UK GMT string to local date in JavaScript在 JavaScript 中将日期从英国 GMT 字符串转换为本地日期
【发布时间】:2020-07-02 06:08:43
【问题描述】:

我有一种情况,我总是从服务器返回日期作为英国日期时间字符串。

例如'2020-07-19 16:40:00'

这将是英国下午 4:40 +01:00 或 3:40 PM UTC。

我希望能够将这个时间从 GMT 转换为计算机上的本地时间;

如果我在英国时这样做...

var date = new Date('2020-06-19 16:40:00 GMT');

它返回Fri Jun 19 2020 17:40:00 GMT+0100 (British Summer Time)

还有一个小时。

如果我在冬季(没有夏令时)进行约会,这是正确的。

var date = new Date('2020-01-19 16:40:00 GMT');

返回Sun Jan 19 2020 16:40:00 GMT+0000 (Greenwich Mean Time)

有没有一种方法可以根据英国时钟时间正确调整它以始终给出正确的时间,而不管计算机设置在哪个时区。

提前致谢

【问题讨论】:

  • 你试过.toLocaleDateString()吗?
  • @SebastianKaczmarek — 问题在于解析,而不是格式化。

标签: javascript datetime


【解决方案1】:

据我了解,您不知道来自服务器的时间戳是 GMT 还是 BST,因为不包括偏移量。你可以使用纯 JS 来解决它,但它有点笨拙且容易出错,请参阅 Calculate Timezone offset only for one particular timezone

让服务器使用 ECMAScript 支持的 ISO 8601 格式并发送偏移量或始终使用 UTC/GMT 会更好。

如果这不是一个选项,您可以使用像 Luxon 这样的库来指定用于解析的位置(以及偏移规则),例如

let DateTime = luxon.DateTime;

['2020-07-19 16:40:00', // BST +1
 '2020-01-19 16:40:00'  // GMT +0
].forEach(ts => console.log(
  DateTime.fromFormat(ts, 'yyyy-LL-dd HH:mm:ss', {zone: 'Europe/London'}))
);
<script src="https://cdn.jsdelivr.net/npm/luxon@1.24.1/build/global/luxon.min.js"></script>

PS 不要忘记总是告诉解析器要解析的格式。

【讨论】:

  • 非常感谢您的回答,您理解正确。我稍后会用 luxon 试试这个,然后回复你。
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2016-11-06
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多