Luxon Js 格式化日期

LuxonJs formating date

我正在从数据库中获取 UTC 日期

示例:2021-06-14T16:00:30.000Z

想法是将此日期更改为 LOCAL 日期,因此输出需要

2021-06-14T12:00:30.000Z

问题是无论 Luxon 使用什么方法,我都没有得到特定格式 (YYYY-mm-ddTHH:mm:ssZ)

我该怎么做?

这段代码是我将从数据库中获取日期的地方,只需要该格式

const d = DateTime.fromISO('2021-06-14T16:00:30.000Z', { zone: 'America/Santiago' });

ISO 格式基本上是 [date]T[localtime][offset]。偏移量告诉您本地时间用什么 UTC 偏移量表示。它可能类似于 -04:00(比 UTC 晚四个小时)或者它可能是“Z”,这意味着 +00:00,并且通常不仅意味着偏移量,还意味着该区域是 UTC。

所以问题是上面有一个“Z”,你期望的字符串明确表示它是 不是 本地时间,即使你已经明确转换了你的数据库的 UTC时间为圣地亚哥当地时间。换句话说,您想要的字符串指定了与 DateTime 对象所代表的 不同的时间 。这就是为什么 Luxon 没有方便的方法来做你想做的事;这真的没有意义。

所以这里有几个选项:

d.toISO() //=> "2021-06-14T12:00:30.000-04:00", probably what you want
d.toISO({ includeOffset: false }) //=> "2021-06-14T12:00:30.000", if you don't want the offset
d.toUTC().toISO() // "2021-06-14T16:00:30.000Z", back to UTC

如果你真的想要当地时间但是有一个 Z,你可以做到这一点,但请注意,任何解析它的东西都会将它解释为表达不同的时间(不是不同的当地时间,而是历史上不同的毫秒)世界)比你数据库中的时间少四个小时:

d.toISO({ includeOffset: false }) + "Z"; // => "2021-06-14T12:00:30.000Z"

// OR

d.setZone("utc", { keepLocalTime: true }).toISO() // => "2021-06-14T12:00:30.000Z"