0

我从数据库获取 UTC 日期

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

这个想法是将此日期更改为本地日期,因此输出需要是

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' });
4

1 回答 1

0

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"

于 2021-06-24T17:06:03.463 回答