Сохранить и загрузить дату 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
, пытаясь сохранить объект даты неповрежденным, но это тоже не работает.
Я предполагаю, что мне нужно проанализировать дату в localStorage. Если нет лучшего метода, как я могу это сделать?
Ответы
Ответ 1
Демо: 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
, то, что вы пытаетесь, пытается вычесть одну строку из другой. Вот почему это не работает.
Ответ 2
Чтобы сохранить дату в localStorage, просто выполните
localStorage['key'] = ''+myDate.getTime();
И восстановить его:
var myDate = new Date(parseInt(localStorage['key'], 10));
(вы также можете проверить его ранее)
Он также работает с длительностью (минута минус другой): просто используйте значение длиной (миллисекунды) и конвертируйте в строку и из нее.
Обратите внимание, что JSON не включает стандартизованный формат даты. Не используйте JSON для дат.
Ответ 3
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.
Ответ 4
Я бы использовал это:
var d1 = new Date();
localStorage.setItem("key", d1.getTime());
var d2 = new Date(parseInt(localStorage.getItem[key]));
все, чего не хватает, так это правильной нулевой проверки.
Ответ 5
Вы можете просто пойти:
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
Ответ 6
В моем случае это нужно в типе Date
. Поэтому вот оно:
var a = new Date();
localStorage.a = a;
var c = new Date(localStorage.a);