2012-02-05 9 views
9

Tengo una aplicación HTML5 sencilla en la que estoy trabajando actualmente y me pregunto si es posible eliminar un elemento en el almacenamiento local HTML5 después de un período de tiempo, como: después de 24 horas, eliminar este elemento, etc.¿Eliminar un elemento en el almacenamiento local HTML5 después de un período de tiempo?

Estoy pensando que el objeto Date integrado en JavaScript probablemente sea lo que necesito.

¿Esto es posible? Algunos ejemplos de código serían agradables si pudiera, ¡gracias!

Respuesta

10

podría almacenar la fecha junto con los datos

//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); 
} 
+0

me gusta esta solución, sin embargo, creo que debería tenerse en cuenta para este ejemplo en particular que los valores [1] tiene que ser analizado en un objeto Date antes de su comparación. Como esta nueva Fecha (valores [1]) – labago

0

Si quieres hacer esto creo que básicamente tienen que hacerlo de forma manual. Por ejemplo, puede almacenar la marca de tiempo en una ranura de almacenamiento local junto con cada valor que está almacenando, y luego verifique la marca de tiempo con la hora actual en un intervalo regular como carga de página o setTimeout o algo así.

Ejemplo:

//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); 

EDIT: el método de mrtsherman sería totalmente funcionar tan bien. Del mismo modo, podría ingresar la marca de tiempo como propiedad de un objeto que podría estar almacenando/recuperando con JSON.stringify/parse(). Si la matriz o el objeto son muy grandes, o si tiene muchos de ellos, probablemente sugeriría utilizar el método de propiedad paralelo para la eficiencia.

-3
window.setInterval(function() { 
     localStorage.setItem('nicwincount', 0); 
},8640000); //24 * 60mins * 60sec 

ps: nicwincount es una tienda local configurada anteriormente. localStorage.setItem ('feeds', Ext.encode (feeds));

Espero que pueda ayudarlo.

+1

¿No supone esto que el dispositivo permanece en la página durante 24 horas? ¡Improbable! ;-) – markE

1

utilizar esta solución:

(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); 
    } 

})(); 
+0

¿Quién necesita quedarse? Verifique localStorage si visita el sitio en la última X veces y quítelo si es más grande. –

+0

Así que dame +1 si está trabajando para tu –

+0

Creo que te refieres a 1000 * 60 * 60 * 24 = 24 horas no 24 días – Yuhao

Cuestiones relacionadas