不止谷歌,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
最后修改:2023 年 06 月 12 日
如果觉得我的文章对你有用,请随意赞赏