JavaScript 转换后的 FILETIME 休息一天
JavaScript converted FILETIME is one day off
我一直在阅读有关日期的 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;
}
这可以很好地完成转换,但我想不出处理额外一天的最佳方法,我认为这是由于缺少时区所致。我需要减去一天的秒数吗?或者有什么更好的方法吗
你的错误在这一行:
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 '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;
}
这可以很好地完成转换,但我想不出处理额外一天的最佳方法,我认为这是由于缺少时区所致。我需要减去一天的秒数吗?或者有什么更好的方法吗
你的错误在这一行:
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))