备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 个人教程 谷歌浏览器WebKit/Chrome时间戳与普通Unix时间戳互转 - 带Python/PHP实现
3 0

海报分享

谷歌浏览器WebKit/Chrome时间戳与普通Unix时间戳互转 - 带Python/PHP实现

不止谷歌,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
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客: https://www.9kr.cc/ 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。