前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谷歌浏览器WebKit/Chrome时间戳与普通Unix时间戳互转 - 带Python/PHP实现

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

作者头像
kr
发布2023-01-30 16:15:04
7.8K0
发布2023-01-30 16:15:04
举报
文章被收录于专栏:个人教程个人教程

不止谷歌,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
  • 方法一,直接用库
代码语言:javascript
复制
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)

打印如下

代码语言:javascript
复制
1601-01-01 00:00:00
153884 days, 19:31:10.410824
2022-04-28 19:31:10.410824
1651145470.410824
  • 方法二,直接操作毫秒
代码语言:javascript
复制
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))

打印如下

代码语言:javascript
复制
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
  • 只演示直接操作毫秒
代码语言:javascript
复制
<?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));

输出

代码语言:javascript
复制
当前时间: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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 时间戳
  • WebKit转Unix方法
    • 纯毫秒计算
      • 通过调用库直接计算日期
      • 代码实现
        • Python
          • PHP
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档