Приложение HTML5 для смартфона (android, ios) с localStorage date ()

ДЛЯ МОДЕРАТОРОВ !! Я СОЗДАЛ ЭТОТ ВОПРОС НА stackapps ПОСЛЕ ИССЛЕДОВАНИЯ РАЗДЕЛОВ СТЕКА. НУЖНО УДАЛИТЬ ЭТО?

Привет, я создаю простое приложение HTML5, в котором используется тайм-аут (). Основная функция приложения: вы выбираете элемент, и запускается тайм-аут (). Он работает правильно, но если я закрою приложение, таймер, конечно же, остановится. Я пытаюсь сохранить его в localStorage, но он не работает для того, что мне нужно.

вот мой код

получить текущую дату

var current = new Date();

проверьте, пусто ли localStorage или нет. В противном случае вычисляется разница в миллисекундах между сохраненной датой и текущей датой.

function update() {
  if (localStorage.time != undefined){
  var diff = current - localStorage.time;
   alert (diff)
}

update();

здесь функция сохранения даты, которая будет сохранена, и она проверяет разницу между двумя датами.

function save() {
  localStorage.time = new Date();
  click_time = localStorage.time;
  var diff =  click_time - current;
   alert (diff);
   }

очистить localStorage

   function clear() {
   localStorage.clear();
   }

$(document).ready(function() {
$('input#save').click(function(){
  save();
});
$('input#clear').click(function(){
  clear();
});
});


<input type="submit" value="click me!" id="save"/>
<input type="submit" value="clear" id="clear"/>

Но я просто получаю NaN !! Проблема в том, как мне сохранить дату в localStorage и как я могу получить ее как дату?

Заранее спасибо.


person Tyler Durden    schedule 30.03.2012    source источник


Ответы (1)


Заменить все new Date(); на new Date().getTime();

Различия между new Date (). GetTime () будут в миллисекундах.

И просто чтобы уточнить:

Использование new Date () вернет строку типа «Fri Mar 30 2012 12:02:33 GMT-0400 (EDT)». Поэтому, когда вы пытаетесь выполнить вычитание между двумя из этих строк, вы получаете NaN.

new Date (). getTime () вернет целое число, подобное этому 1333123359919. Это в миллисекундах с 1 января 1970 года (или что-то в этом роде). Таким образом, разница между двумя из них даст вам количество миллисекунд между двумя вызовами, что вам и нужно.

person soundslikeneon    schedule 30.03.2012
comment
Спасибо!! оно работает. Я не могу отдать вам голос из-за моей низкой репутации. - person Tyler Durden; 30.03.2012
comment
Совершенно никаких проблем. Рад, что смог помочь! Кроме того, если вам когда-нибудь понадобится превратить эти длинные целые числа обратно в строку, вы можете создать другой объект Date, например, new Date(1333123359919), где 1333123359919 - это значение, сохраненное из getTime (). - person soundslikeneon; 30.03.2012
comment
Но странно то, что если даты нет в localStorage, она работает правильно. Вот почему я был немного сбит с толку и сосредоточился на функции localStorage, а не на дате. - person Tyler Durden; 30.03.2012
comment
О верно! Когда вы создаете общий new Date(), это объект Date, который большую часть времени обрабатывается как строка ... но, очевидно, вы фактически можете вычесть два из них и получить правильный ответ. Когда вы пишете в localStorage, она становится реальной строкой без каких-либо других свойств, которые раньше имел объект Date. Поэтому, когда вы пытаетесь восстановить это из localStorage, вы получаете только строку. Помните ... в localStorage все является строкой. - person soundslikeneon; 30.03.2012
comment
Спасибо за ваши предложения. Я создаю свое первое простое приложение, которое включает localStorage и базу данных на стороне клиента, и эта часть важна, потому что она должна обрабатывать таймер. Когда пользователь нажимает кнопку сохранения, запускается таймер, поэтому, если они закроют приложение и снова откроют его, приложение вычислит разницу во времени и проверит разницу между этим и таймером, чтобы перезапустить таймер с миллисекунд. левый. Не знаю, понятно ли, что я сказал, из-за моего английского. - person Tyler Durden; 31.03.2012