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

Luxon: how to disregard default timezone in a specific date

我想在不考虑 Settings.defaultZone 的情况下生成 Luxon 日期。

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

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
 ...
}

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

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

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

我试过这个:

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

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

我想有一个简单的方法可以做到这一点,只是我找不到。

我真的很接近:

const formattedValue = DateTime.fromISO(value, {zone: 'utc'});

成功了。

我知道是这样 old-top 但对于有类似问题的人,只需使用 toISODate()

例如:

const firstDayOfYear = (year) => luxon.DateTime.fromObject({ year, month: 1, day: 1 });
const year = firstDayOfYear(2015).toISODate() // will equal '2015-12-31'

来自文档:

DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'
DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'