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"