2 回答
TA贡献1856条经验 获得超11个赞
PHP(64 位,无毫秒)的解决方案是
$ts = 13209562668824233;
$date = date_create("1601-1-1 UTC")
->modify((int)($ts/1000000)." Seconds")
->format('Y-m-d H:i:s')
; //"2019-08-06 10:57:48"
TA贡献1852条经验 获得超1个赞
正如这个答案所解释的,Chrome 时间戳不等于 Unix 纪元时间。这就是为什么您无法从此类方法中获得预期结果的原因。它实际上是自 1601 年 1 月 1 日以来的微秒(与 Unix 纪元时间自 1970 年 1 月 1 日以来的秒数相反)。
您可以在此处测试您的 WebKit 时间戳,您会看到它返回 2019 年 8 月 6 日星期二 10:57:48 (UTC)。
所以要在代码中转换它,我们应该首先减去 1970 和 1601 之间的差异(以微秒为单位),然后将值除以 100 万以获得秒(C# 解决方案):
public static DateTime ConvertWebKitTime(long webkitEpoch)
{
const long epochDifferenceMicroseconds = 11644473600000000; // difference in microseconds between 1601 and 1970
var epoch = (webkitEpoch - epochDifferenceMicroseconds) / 1000000; // adjust to seconds since 1st Jan 1970
return DateTimeOffset.FromUnixTimeSeconds(epoch).UtcDateTime; // convert to datetime
}
- 2 回答
- 0 关注
- 242 浏览
添加回答
举报