Удаление элемента в локальном хранилище HTML5 через определенный промежуток времени? - PullRequest
13 голосов
/ 05 февраля 2012

У меня есть простое приложение HTML5, над которым я сейчас работаю, и мне интересно, можно ли удалить элемент в локальном хранилище HTML5 через определенный период времени, например: через 24 часа, удалить этот элемент и т. Д.1001 *

Я думаю, что Date Object, встроенный в JavaScript, вероятно, был бы тем, что мне нужно.

Возможно ли это?Некоторые примеры кода были бы хороши, если бы вы могли, спасибо!

Ответы [ 4 ]

13 голосов
/ 05 февраля 2012

Вы можете сохранить дату вместе с данными

//add data we are interested in tracking to an array
var values = new Array();
var oneday = new Date();
oneday.setHours(oneday.getHours() + 24); //one day from now
values.push("hello world");
values.push(oneday);
try {
    localStorage.setItem(0, values.join(";"));
} 
catch (e) { }

//check if past expiration date
var values = localStorage.getItem(0).split(";");
if (values[1] < new Date()) {
    localStorage.removeItem(0);
}
1 голос
/ 18 июня 2016

Используйте это решение:

(function () {

  var lastclear = localStorage.getItem('lastclear'),
      time_now  = (new Date()).getTime();

  // .getTime() returns milliseconds so 1000 * 60 * 60 * 24 = 24 days
  if ((time_now - lastclear) > 1000 * 60 * 60 * 24) {

    localStorage.clear();

    localStorage.setItem('lastclear', time_now);
  }

})();
1 голос
/ 05 февраля 2012

Если вы хотите сделать это, я думаю, что вы должны сделать это вручную. Например, вы можете сохранить отметку времени в слоте localStorage рядом с каждым сохраняемым значением, а затем сравнить отметку времени с текущим временем через некоторый регулярный интервал, такой как загрузка страницы или setTimeout или что-то подобное.

Пример:

//this function sets the value, and marks the timestamp
function setNewVal(prop)
{
    window.localStorage[prop] = Math.random();
    window.localStorage[prop+"timestamp"] = new Date();
}

//this function checks to see which ones need refreshing
function someRucurringFunction()
{
    //check each property in localStorage
    for (var prop in window.localStorage)
    {   //if the property name contains the string "timestamp"
        if (prop.indexOf("timestamp") != -1)
        {   //get date objects
            var timestamp = new Date(window.localStorage[prop]);
            var currentTime = new Date();

            //currently set to 30 days, 12 hours, 1 min, 1s (don't set to 0!)
            var maxAge =    (1000   *   1)  *//s
                            (60     *   1)  *//m
                            (60     *  12)  *//h
                            (24     *  30);  //d

            if ((currentTime - timestamp) > maxAge)
            {//if the property is too old (yes, this really does work!)
                //get the string of the real property (this prop - "timestamp")
                var propString = prop.replace("timestamp","");
                //send it to some function that sets a new value
                setNewVal(propString);
            }
        }
    }
}
//set the loop
window.setInterval(someRucurringFunction,(1000*60*60);

РЕДАКТИРОВАТЬ: метод Мртшерман также будет работать полностью. Точно так же вы можете ввести метку времени как свойство объекта, который вы можете сохранять / получать с помощью JSON.stringify / parse (). Если либо массив, либо объект очень велики, либо их очень много, я бы, вероятно, предложил для эффективности использовать метод параллельных свойств.

0 голосов
/ 28 августа 2013
window.setInterval(function () {
        localStorage.setItem('nicwincount', 0);
},8640000); //24 * 60mins * 60sec

ps: nicwincount - локальное хранилище, которое вы установили ранее. localStorage.setItem ('каналы', Ext.encode (каналы));

надежда может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...