luxon在给定时区的情况下将本地时间转换为utc

时间:2019-07-08 00:29:09

标签: javascript luxon

数据源具有一个没有偏移量的ISO-8601日期时间字段。

示例:2019-07-09T18:45

但是,我知道相关时间被理解为America/Chicago时区。

如何使用获取与UTC相同时间的Luxon DateTime对象?

我可以做DateTime.fromISO('2019-07-09T18:45').plus({hours: 5}) ...,但这仅在夏令时的半年内(如现在)有效。否则,偏移量将为.plus({hours: 6})

Luxon是否具有日期识别(因此也是DST识别)方法,用于从特定的分区本地时间转换为UTC?

2 个答案:

答案 0 :(得分:1)

由于您知道输入日期的时区,因此可以在解析时使用zone选项。正如fromISO文档所述:

public static fromISO(text: string, opts: Object): DateTime
     

opts.zone:如果在输入字符串本身中未指定偏移量,则使用此区域。

然后,您可以使用toUTC将DateTime转换为UTC:

  

将DateTime的区域“设置”为UTC。返回一个新构造的DateTime。

     

相当于setZone('utc')

这里有一个现场样本:

const DateTime = luxon.DateTime;
const d = DateTime.fromISO('2019-07-09T18:45', {zone: 'America/Chicago'});
console.log(d.toISO());
console.log(d.toUTC().toISO());
<script src="https://cdn.jsdelivr.net/npm/luxon@1.16.0/build/global/luxon.js"></script>

答案 1 :(得分:0)

您可以参考以下luxon函数:

  1. isInDST https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-get-isInDST

要检查当前时间是否基于夏令时!

  1. toUTC:用于转换为基于UTC的时间的功能

https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-method-toUTC