【问题标题】:Get Date Range in UTC获取 UTC 日期范围
【发布时间】:2021-02-25 20:07:13
【问题描述】:

我有以下范围需要计算:

const range = (new Date(endDate) - new Date(startDate))

其中 startDate 和 endDate 分别为:"2020-11-03 17:34:24""2021-05-06 18:34:1"

如何将其转换为使用 UTC,以便所有浏览器的秒数保持不变?

我正在考虑使用Date(startDate).toISOString() 转换它们,然后将其输入到 newDate 对象中是否有意义?

【问题讨论】:

  • 您可以使用 Date.UTC(),如 MDN 中所述:developer.mozilla.org/de/docs/Web/JavaScript/Reference/…
  • 答案在很大程度上取决于您为startDateendDate 传递的具体内容,您没有在此处显示。请编辑您的问题以提供示例值。 (特别是,它们是字符串、数字、对象等吗?)
  • @MattJohnson-Pint 已更新
  • 您的意图是这些字符串代表 UTC 时间,还是用户的本地时间? (另外,这是 endDate 秒数的错字吗?)
  • @MattJonson-Pint UTC。这不能是用户的时间,因为我有一个需要在所有领域保持一致的计算。

标签: javascript datetime timezone utc dst


【解决方案1】:

您应该确保它在ECMAScript Date Time String Format 中(类似于 ISO 8601)。这意味着日期和时间部分应该用T 分隔,对于UTC 值,它应该以Z 结尾。

在您的情况下,由于您的输入值类似于 "2020-11-03 17:34:24" 并且是 UTC,因此您可以在解析之前进行一些字符串操作。

const start = new Date(startDate.replace(' ', 'T').concat('Z'));
const end = new Date(endDate.replace(' ', 'T').concat('Z'));
const seconds = (end - start) / 1000;

【讨论】:

  • 谢谢我现在要测试这个。出于好奇,有没有办法将时区添加到日期对象以执行以下操作?例如。计算来自不同时区的对象的总秒数(有些有夏令时,有些没有)
  • 没有。 Date 对象只有一个内部值 - 以毫秒为单位的 Unix 时间戳(基于 UTC)。它不存储任何时区信息。你可以考虑Luxon
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多