从Chrome存储中检索Date对象不起作用

时间:2018-10-16 15:27:26

标签: google-chrome-extension google-chrome-storage

在Chrome扩展程序中,我试图将Date对象保存到存储中,然后将其读回。根据{{​​3}}

  

类型为“对象”和“功能”的值通常会序列化   到{},但Array(按预期序列化),Date和   正则表达式(使用其String表示序列化)。

我要另存为:

 var value= new Date(Date.now());
 chrome.storage.sync.set({"testdate":value}, function(){
     console.log("saved testdate to storage:");
     console.log(value);

 });

记录该值的输出为

  

2018年10月16日星期二08:22:11 GMT-0700(太平洋夏令时间)

我稍后将从存储中检索为:

chrome.storage.sync.get("testdate", function(items){

        console.log("test date from storage:");
        console.log(items.testdate);
});

在这种情况下,logging items.testdate的值为:

  

对象    proto :构造函数:Object()hasOwnProperty:ƒhasOwnProperty()isPrototypeOf:ƒisPrototypeOf()propertyIsEnumerable:ƒ   propertyIsEnumerable()toLocaleString:ƒtoLocaleString()toString:ƒ   toString()valueOf:ƒvalueOf()    defineGetter :ƒ defineGetter ()    defineSetter :ƒ defineSetter ()    lookupGetter :ƒ lookupGetter ()    lookupSetter :ƒ lookupSetter ()获得 proto :ƒ proto ()设置 proto :ƒ proto ()

无法弄清楚如何找回我的Date对象(或将字符串表示形式转换回Date)

1 个答案:

答案 0 :(得分:0)

设置侧

epsilon

站在一边

const currentTime = (new Date()).toJSON();
const items = { 'testdate': currentTime }; 
chrome.storage.local.set(items, () => {
    if (chrome.runtime.lastError) {
        console.error(chrome.runtime.lastError.message);
    }
});

来源

我的代码基于Date.prototype.toJSON

chrome.storage.local.get(['testdate'], (result) => {
    if (chrome.runtime.lastError) {
        console.error(chrome.runtime.lastError.message);
    } else {
        const storedJSONDate = result['testdate'];
        const testdate = new Date(storedJSONDate);
        console.log(testdate);
    }
});

从Chrome存储空间official documentation,我认为这是因为Date无法按预期进行序列化。因为它指定了Array和Regex序列化的方式,而不指定Date序列化的方式,所以我认为它序列化为var jsonDate = (new Date()).toJSON(); var backToDate = new Date(jsonDate); console.log(jsonDate); //2015-10-26T07:46:36.611Z ,这是我不包括{}部分时得到的。

  

提供每个键/值对用于更新存储的对象。存储中的任何其他键/值对均不会受到影响。   诸如数字之类的原始值将按预期进行序列化。类型为“ object”和“ function”的值通常会序列化为{},但Array(按预期序列化),Date和Regex(使用其String表示序列化)除外。