在我尝试过的每个日期时间库中,时区都是持续的痛苦。所以问题是,假设您有一个以 string: 形式提供的 UTC 日期时间2019-06-25T05:00:00Z。如何从中创建 UTC DateTime 对象(我使用 luxon,但答案可以是任何库)?
console.info(luxon.DateTime.fromISO('2019-06-25T05:00:00Z').toSQL());Run Code Online (Sandbox Code Playgroud)
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码片段时,我得到:
2019-06-25 09:00:00.000 +04:00 // local timezone
Run Code Online (Sandbox Code Playgroud)
虽然我需要:
2019-06-25 05:00:00.000 -00:00 // UTC
Run Code Online (Sandbox Code Playgroud)
三种选择供您选择:
1)Luxon 的文档说你可以从中fromISO获取 a DateTime。这可以正确解析字符串。看起来要按照您想要的方式对其进行格式化,您必须告诉它使用区域 UTC,但那是因为它在输出上进行格式化:
const {DateTime} = luxon;
console.info(DateTime.fromISO('2019-06-25T05:00:00Z', { zone: "UTC"}).toSQL());Run Code Online (Sandbox Code Playgroud)
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>Run Code Online (Sandbox Code Playgroud)
您还可以使用setZone("UTC")的结果fromISO。
2) JavaScript 的内置Date对象会将其解析为 UTC ( new Date(yourString)),因为它采用规范中定义的格式。然后,您可以使用 UTC 方法来获取 UTC 信息(getUTCHours等),或者您可以使用本地日期/时间方法来获取本地信息(getHours等)。您还可以使用toISOString获取 UTC 字符串:
console.info(new Date('2019-06-25T05:00:00Z').toISOString());Run Code Online (Sandbox Code Playgroud)
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>Run Code Online (Sandbox Code Playgroud)
3)当下也乐意这么做。
console.info(moment.utc('2019-06-25T05:00:00Z').toISOString());Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>Run Code Online (Sandbox Code Playgroud)
如果你需要+00:00而不是Z,你可以扔一个replace,或者使用 Luxon 或 Moment 他们提供完整的格式化选项。
| 归档时间: |
|
| 查看次数: |
5984 次 |
| 最近记录: |