如何将 Chrome 书签“date_ added”值解析为日期

Rob*_*obG 11 javascript google-chrome date

Chrome 书签文件是 JSON,其中包含表示特定日期和时间的“date_ added”值,例如

{
 "checksum": "05b8bba8b5f0e9ad1cc8034755557735",
 "roots": {
    "bookmark_bar": {
       "children": [ {
          "children": [ {
             "date_added": "13170147422089597",
             "id": "121",
             "name": "NativeScript: Getting Started Guide",
             "type": "url",
             "url": "https://docs.nativescript.org/tutorial/chapter-0"
          } ],
...
Run Code Online (Sandbox Code Playgroud)

我尝试将值视为纳秒并传递给 Date 构造函数:

new Date(13170147422089597 / 1000); // 2387-05-07T06:17:02.089Z
Run Code Online (Sandbox Code Playgroud)

但这似乎不正确。

值“13170147422089597”应如何转换为日期或日期字符串?

Rob*_*obG 11

Chrome 书签时间值是 1601-01-01T00:00:00Z 纪元的微秒。转换为日期:

  1. 除以 1,000 得到毫秒
  2. 调整到 1970-01-01T00:00:00Z 的纪元
  3. 将结果值传递给 Date 构造函数

例如

var timeValue = '13170147422089597';
new Date(Date.UTC(1601,0,1) + timeValue / 1000); // 2018-05-07T06:17:02.089Z
Run Code Online (Sandbox Code Playgroud)

将值 Date.UTC(1601,0,1) 存储为常量 (-11644473600000) 并转换为函数给出:

var timeValue = '13170147422089597';
new Date(Date.UTC(1601,0,1) + timeValue / 1000); // 2018-05-07T06:17:02.089Z
Run Code Online (Sandbox Code Playgroud)


小智 7

它是 WebKit/Chrome 时间戳,代表自 1601/1/1 UTC 以来的微秒。

它来自 Windows NT 时间戳(自 1601/1/1 UTC 以来为 100 纳秒),可用作 FileTime 结构。

https://www.epochconverter.com/webkit 中有一个在线 WebKit/Chrome 时间戳转换器

它也在那里提供它的代码。

但是代码是在 Python2 中的,所以我把它转录成 Python3,如下所示:

import datetime
def date_from_webkit(webkit_timestamp):
    epoch_start = datetime.datetime(1601,1,1)
    delta = datetime.timedelta(microseconds=int(webkit_timestamp))
    print(epoch_start + delta) # py3 requires () for print

date_from_webkit(int(input('Enter a Webkit timestamp to convert: '))) # py3 integrates raw_input() and input() into input()
Run Code Online (Sandbox Code Playgroud)