不止谷歌,Edge等基于Chromium的应该都适用。
时间戳
WebKit时间戳:从1601年1月1日(UTC/GMT的午夜)开始所经过的微秒数
Unix时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒/毫秒数
WebKit转Unix方法
1ms = 1000μs
1s = 1000ms
纯毫秒计算
第一步:把WebKit微秒转为毫秒/秒
第二步:计算1970年1月1日到1601年1月1日间隔的秒/毫秒数(其实是固定的11644473600秒)
第三步:Unix时间戳 = 第一步结果 - 第二步结果
通过调用库直接计算日期
第一步:把WebKit微秒转为毫秒/秒(可选)
第二步:用库计算1601年1月1日+第一步的毫秒/秒后的日期
第三步:把第二步的结果转为Unix时间戳
代码实现
Python
import datetime
def date_from_webkit(webkit_timestamp):
epoch_start = datetime.datetime(1601,1,1)
# 计算webkit_timestamp时长
delta = datetime.timedelta(microseconds=int(webkit_timestamp))
print(epoch_start)
print(delta)
# 计算1601年1月1日经过webkit_timestamp微秒后的日期时间UTC
print(epoch_start + delta)
# 转成秒级时间戳
print((epoch_start + delta).timestamp())
# inTime = int(input('输入要转换的Webkit时间戳: '))
inTime = 13295647870410824
date_from_webkit(inTime)
打印如下
1601-01-01 00:00:00
153884 days, 19:31:10.410824
2022-04-28 19:31:10.410824
1651145470.410824
import datetime
# inTime = int(input('输入要转换的Webkit时间戳: '))
inTime = 13295647870410824
# 计算1601-1-1到1970-1-1时间差
# 其实是固定的11644473600秒
diff = (datetime.datetime(1970,1,1)-datetime.datetime(1601,1,1))
# 时间差
print(diff)
# 秒级时间差
print(diff.total_seconds())
# 微秒级Unix时间戳
unix_stamp_microseconds = int(inTime-(diff.total_seconds())*1000000)
# 毫秒级Unix时间戳
unix_stamp_millisecond = int((inTime/1000)-(diff.total_seconds())*1000)
# 秒级Unix时间戳
unix_stamp_seconds = int(inTime/1000000-(diff.total_seconds()))
print(unix_stamp_microseconds)
print(unix_stamp_millisecond)
print(unix_stamp_seconds)
# 转回UTC时间
print(datetime.datetime.utcfromtimestamp(unix_stamp_seconds))
print(datetime.datetime.utcfromtimestamp(unix_stamp_millisecond/1000))
print(datetime.datetime.utcfromtimestamp(unix_stamp_microseconds/1000000))
打印如下
134774 days, 0:00:00
11644473600.0
1651174270410824
1651174270410
1651174270
2022-04-28 19:31:10
2022-04-28 19:31:10.410000
2022-04-28 19:31:10.410824
PHP
<?php
$webkit_time = 13295647870410824;
echo("当前时间:".date("Y-m-d h:i:s"));
echo('<br><br>');
echo("待转换WebKit时间戳:".$webkit_time);
echo('<br><br>');
// 1601-1-1到1970-1-1的秒级时间差
$diff = (mktime(0,0,0,1,1,1970)-mktime(0,0,0,1,1,1601));
echo("1601-1-1到1970-1-1的秒级时间差:".$diff);
echo('<br><br>');
// 微秒级Unix时间戳
$unix_stamp_microseconds = $webkit_time-$diff*1000000;
// 毫秒级Unix时间戳
$unix_stamp_millisecond = $webkit_time/1000-$diff*1000;
// 秒级Unix时间戳
$unix_stamp_seconds = $webkit_time/1000000-$diff;
echo("微秒级Unix时间戳".$unix_stamp_microseconds);
echo('<br><br>');
echo("毫秒级Unix时间戳".(int)$unix_stamp_millisecond);
echo('<br><br>');
echo("秒级Unix时间戳".(int)$unix_stamp_seconds);
echo('<br><br>');
// 转回日期时间显示
echo("格式化显示:".date("Y-m-d h:i:s",(int)$unix_stamp_seconds));
输出
当前时间:2022-12-05 05:46:48
待转换WebKit时间戳:13295647870410824
1601-1-1到1970-1-1的秒级时间差:11644473600
微秒级Unix时间戳1651174270410824
毫秒级Unix时间戳1651174270410
秒级Unix时间戳1651174270
格式化显示:2022-04-29 03:31:10