2012-02-05 22 views
9

Ben şu anda üzerinde çalışıyorum ve bu sanki bir süre sonra HTML5 Yerel Depolama bir öğeyi kaldırmak mümkün olmadığını merak ediyorum o basit HTML5 App vardır: vb bu maddeyi, 24 saat sonra kaldırmakBir süreden sonra bir öğeyi HTML5 Yerel Depolama biriminde kaldırma?

JavaScript’te bulunan Date Object’in muhtemelen ihtiyacım olan şey olacağını düşünüyorum.

Bu mümkün mü? Yapabilirsen bazı kod örnekleri iyi olurdu, teşekkürler! Eğer siz temelde elle yapmak zorunda düşünüyorum bunu yapmak istiyorsanız

cevap

10

Verilerin

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

Ne var ki ben onu [1] onun karşılaştırıldığında önce tarihi nesnesine ayrıştırılması gerekiyor değerleri bu özel örneğin unutulmamalıdır düşünüyorum bu çözümü gibi. Bu yeni tarihi beğenin (değerler [1]) – labago

0

birlikte tarih depolayabilir. Örneğin, zaman damgasını sakladığınız her bir değerin yanında bir localStorage yuvasında depolayabilir ve ardından, sayfa yükü veya setTimeout veya bir şey gibi belirli aralıklarla geçerli zamana karşı zaman damgasını kontrol edebilirsiniz.

Örnek:

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

DÜZENLEME: mrtsherman yöntemi tamamen de çalışacak. Benzer şekilde, zaman damgasını JSON.stringify/parse() ile sakladığınız/aldığınız bir nesnenin bir özelliği olarak girebilirsiniz. Dizi ya da nesne çok büyükse ya da bunlardan çok fazlasına sahipseniz, büyük olasılıkla verim için paralel özellik yöntemini kullanmanızı öneririm.

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

ps: nicwincount, daha önce ayarladığınız bir yerel ayardır. localStorage.setItem ('feeds', Ext.encode (feeds));

Umarım size yardımcı olabilir.

+1

Bu, aygıtın sayfada 24 saat kaldığını varsayar mı? Olası olmayan! ;-) – markE

1

Kullanım Bu Çözüm:

(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

kim kalıyor ?! Son X saatinde siteyi ziyaret ederseniz ve daha büyükse kaldırırsanız, localStorage'ı kontrol edersiniz. –

+0

Yani, –

+0

için çalışıyorsa, + 1 olsun 1000 * 60 * 60 * 24 = 24 saat değil 24 gün demek istiyorum – Yuhao

İlgili konular