将当前时间转换为WebKit/Chrome17位时间戳Javascript(我在Python中有答案)
Convert current time to WebKit/Chrome 17-digit timestamp in Javascript (I have the answer in 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
这是来自这个回复
我已将给定的 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'不会return所有系统的相同时间值,因为没有偏移量意味着它将被解析为本地,因此解析的值将因当地时区偏移而异。
根据链接的答案,纪元是 1601 年 1 月 1 日 00:00 UTC,这将是一个常数 (-11644473600000),因此无需每次都计算它。
代码的优化版本是:
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'));
我需要将 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
这是来自这个回复
我已将给定的 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'不会return所有系统的相同时间值,因为没有偏移量意味着它将被解析为本地,因此解析的值将因当地时区偏移而异。
根据链接的答案,纪元是 1601 年 1 月 1 日 00:00 UTC,这将是一个常数 (-11644473600000),因此无需每次都计算它。
代码的优化版本是:
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'));