【问题标题】:JavaScript converted FILETIME is one day offJavaScript 转换的 FILETIME 休息一天
【发布时间】:2019-04-05 00:21:44
【问题描述】:

我一直在阅读有关日期的 JavaScript 'off-by-one',但我不知道如何在这种情况下实现它。我正在将 Internet Explorer cookie 中的一些值转换为 Microsoft FILETIME,但它总是提前一天,代码是:

function ConvertToFiletime(high, low) {
    var seconds = 1e-7 * (high * Math.pow(2, 32) + low) - 11644473600;
    var date = new Date.UTC(1970,1,1);
    date.setSeconds(date.getSeconds() + seconds);
    return date;
}

这可以很好地完成转换,但我无法找到处理额外一天的最佳方法,我认为这是由于缺少时区。我需要减去一天的秒数吗?或者有没有更好的方法。

【问题讨论】:

  • 您应该始终使用 UTC 方法以避免时区问题,仅在显示时间时使用非 UTC 方法
  • 为什么不直接使用毫秒?新日期(秒*1000)
  • 不确定这是否是您的问题,但Date.UTC(1970, 1, 1) 是 2 月 1 日。您可能想要 1 月 1 日的 Date.UTC(1970, 0, 1)
  • 克林特,这完全是问题所在!感谢您注意到这一点。

标签: javascript filetime


【解决方案1】:

你的错误在这一行:

var date = new Date.UTC(1970,1,1);

Date.UTC(1970, 1, 1) 实际上是 2 月 1 日,因为月份索引从 0 开始。您很可能想要 Date.UTC(1970, 0, 1),即 1 月 1 日。

另外,new Date.UTC() 在最新版本的 Chrome 和 IE 11 上为我抛出错误。要正确创建日期对象,请使用:

new Date(Date.UTC(1970, 0, 1))

【讨论】:

  • 感谢克林特,解决了这个问题。我正忙于查看奇怪的 JavaScript 日期行为,以至于忽略了那个愚蠢的部分 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多