【问题标题】:Javascript - subtract two dates in milliseconds considering daylight time savingJavascript - 考虑到夏令时,以毫秒为单位减去两个日期
【发布时间】:2015-10-24 17:21:34
【问题描述】:

我有以下功能:

function subtractDatesMs(date1, date2) {
    var departureDate = new Date(date1);
    var arriveDate = new Date(date2);
    var diff = (arriveDate.getTime() - departureDate.getTime());
    return diff;
}

作为参数发送的日期如下:

"2015-11-09T15:50:00-04:00",
"2015-11-09T12:40:00-05:00"

包括时区偏移值。

它在大多数情况下都可以正常工作,但是当我从使用夏令时的区域/区域中减去一些日期时,差异是不正确的(例如延迟/提前 1 小时)。

考虑到夏令时来自其所在时区的地区/地区的夏令时,减去这些日期并获得正确的毫秒差的最佳方法是什么?

欢迎任何样品。如果需要,您可以使用 jquery 或任何其他库来获取正确的值。

【问题讨论】:

  • 转换为祖鲁时间?

标签: javascript date dst


【解决方案1】:

我认为问题在于您的代码正在接收的日期字符串。 UTC 偏移量应正确反映额外的 DST 偏移量。您给"2015-11-09T12:40:00-05:00" 的示例时间暗示了东部标准时间*,因为-05:00。另一个示例时间"2015-11-09T15:50:00-04:00" 表示大西洋标准时间或东部夏令时间(即东部标准加 DST)

JavaScript 的 Date 对象将正确转换您在示例中提供的网络时间格式。

如果无法更正输入时间,那么您还需要知道国家/地区,因为 DST 特定于某个国家或地区。然后,您可以使用How to know whether a country is using Daylight Saving Time using JavaScript? 给出的答案中的解决方案,该解决方案检索给定地点或纬度和经度的正确时区偏移量。

* = 假设为北美

【讨论】:

  • 感谢您的回答。这是否意味着我需要使用外部 API 来获取某个国家/地区的 DST?
  • @AlbertoMontellano - 不,这意味着您的输入值应该已经考虑 DST,因此没有什么可做的了。如果有人向您发送了错误的值,那将在他们的一端进行修复 - 而不是您的。
猜你喜欢
  • 2019-09-05
  • 2018-02-04
  • 1970-01-01
  • 2013-03-14
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多