将当前时间转换为Javascript中的WebKit/Chrome 17位时间戳(我在Python中有答案)



我需要将JS当前时间转换为WebKit/Chrome 17位时间戳,这是用Python完成的代码(我需要用Javascript(

def date_to_webkit(date_string):
epoch_start = datetime(1601, 1, 1)
date_ = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
diff = date_ - epoch_start
seconds_in_day = 60 * 60 * 24
return '{:<017d}'.format(
diff.days * seconds_in_day + diff.seconds + diff.microseconds)
# Date string to Webkit timestamp
date_to_webkit('2016-08-24 10:35:47')  # 13116508547000000

这是来自此响应https://stackoverflow.com/a/39121470/5546742

我已经将给定的Python代码转换为JS。

function date_to_webkit(date_string) {
epoch_start = new Date(1601, 0, 1);
date_ = new Date(date_string);
diff = Math.abs(date_ - epoch_start) * 1000;
return diff;
}
date_string = "2016-08-24 10:35:47";
webkit_string = date_to_webkit(date_string);
console.log(webkit_string);

输出:

13116508547000000

免责声明:它通过了给定的测试用例。应检查不同时区和不同日期。

PHP代码的文字转换也意味着手动解析字符串。ECMA-262不支持OP时间戳格式,因此使用内置解析器进行解析取决于实现,至少有一个通用浏览器会将其视为无效。因此,应该根据PHP代码手动解析它。

解析"2016-08-24 10:35:47"不会为所有系统返回相同的时间值,因为缺少偏移量意味着它将被解析为本地,因此解析的值将因本地时区偏移量而不同。

根据链接的答案,历元是1601年1月1日00:00UTC,这将是一个常数(-1164473600000(,因此不需要每次都计算它。

代码的优化版本是:

function date_to_webkit(date_string) {
// Parse input timestamp
let [Y, M, D, H, m, s] = date_string.split(/W/);
// Treat timestamp values as local
// 11644421940000 is the epoch offset constant
return (new Date(Y, M-1, D, H, m, s).getTime() + 11644421940000) * 1e3;
}
// Convert webkit/Chrome time value to Date
function webkit_to_date(tv) {
return new Date((tv / 1000) - 11644421940000);
}
let date = '2016-08-24 10:35:47';
let tv = date_to_webkit(date);
console.log('Start date string : ' + date +
'nDate as time value: ' + tv +
'nTime value as Date: ' + webkit_to_date(tv).toLocaleString('en-CA'));

相关内容

  • 没有找到相关文章