Сохранить и загрузить дату localstorage

Я должен сохранить дату в localStorage, и когда страница обновляется, я хочу рассчитать, сколько времени прошло с тех пор.

Теперь, вот проблема: localStorage сохраняет дату как строку, поэтому после ее сохранения в localStorage пытается вычислить разницу между этими двумя датами возвращает NaN.

попробуйте это в консоли javascript:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
console.log(localStorage.b - localStorage.a); //this doesn't work

Я тоже пробовал JSON.stringify и JSON.parse попытка сохранить объект date неповрежденным, но это не работает.

Я предполагаю, что мне нужно разобрать дату в localStorage. Если нет лучшего метода, как я могу это сделать?

5 ответов


демо: http://jsfiddle.net/AuhtS/

код:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
a = Date.parse(localStorage.a); // parse to date object
b = Date.parse(localStorage.b);
console.log(b - a); // now, this will work

причина

все хранится как строка на localStorage.

поэтому, когда вы делаете localStorage.b - localStorage.a, что вы пытаетесь пытается вычесть одну строку из другой. Вот почему это не работает.


чтобы сохранить дату в localStorage, просто сделайте

localStorage['key'] = ''+myDate.getTime();

и восстановить его :

var myDate = new Date(parseInt(localStorage['key'], 10));

(вы также можете проверить, что он определен раньше)

Он также работает с длительностью (дата минус другая): просто используйте значение как long (millisecondes) и преобразуйте в строку и из строки.

обратите внимание, что JSON не включает стандартизированный формат даты. Не используйте JSON для свиданий.


http://rhaboo.org это слой сахара над localStorage, который (среди многих других вещей) исправляет такие вещи. Ты просто напишешь:

var store = Rhaboo.persistent("My Store Name");
console.log ( "Your last visit was " + store.datestamp || "never.");
store.write('datestamp', new Date());

кстати, я писал rhaboo.


Я бы использовал это:

var d1 = new Date();
localStorage.setItem("key", d1.getTime());
var d2 = new Date(parseInt(localStorage.getItem[key]));

все, что отсутствует, - это правильная проверка null.


вы можете просто пойти на:

var date1 = <date1>
var date2 = <date2>
localStorage.setItem('date1', date1.toString())
localStorage.setItem('date2', date2.toString())

var date1 = new Date(localStorage.getItem('date1'))
var date2 = new Date(localStorage.getItem('date2'))
var diff = date1 - date2