Luxon:如何忽略特定日期的默认时区

Ser*_*eon 8 javascript timezone datetime date luxon

我想生成一个 Luxon 日期而不使用 Settings.defaultZone

就我而言,我从第三方日期选择器组件获得了一个日期字符串。格式如下:

2019-06-28T00:00:00

但是,现在我们在所有应用程序中都使用 Luxon 来管理日期,因此我需要解析该日期以生成一个 Luxon 日期。

因此,我将字符串解析如下:

import { DateTime } from 'luxon';
function parseDate(dateString) { // Let's say dateString === 2019-06-28T00:00:00

  const formattedDate = DateTime.fromISO(value); // 2019-06-27T23:00:00.000Z
 ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见, formattedDate受当前时区的影响。在这种特定情况下,在应用程序引导程序中,我们将通用时区设置为 GMT+1。

因此,格式化日期设置为 6 月 27 日的 23:00,而不是 6 月 28 日的 00:00,这是用户在日期选择器中选择的日期。全球时区设置随着时间调整。

这通常很好,但在这种特定情况下(用户选择他们身份证的到期日期),我们不需要也不想考虑时区。我希望将日期设置为 6 月 28 日,UTC 时区。

我试过这个:

const formattedValue = DateTime.fromISO(value).setZone('utc');

但是,这不会修改日期,而是设置为 6 月 27 日。

我想有一种简单的方法可以实现这一目标,只是我找不到它。

Ser*_*eon 7

我真的很接近:

const formattedValue = DateTime.fromISO(value, {zone: 'utc'});
Run Code Online (Sandbox Code Playgroud)

有诀窍。

  • 我想你也可以在字符串的末尾放一个 Z。这适用于系统 Date 对象。显示的格式没有 Z,是未定义时区。这是一种要避免的格式。在某一时刻,chrome 会将其解释为 local 并将 safari 解释为 UTC。恶梦。我不知道现在是否仍然如此。 (2认同)