Проблемы с Date() при использовании JSON.stringify() и JSON.parse()

Я пытаюсь вычислить разницу между двумя раз с использованием JavaScript. Это просто базовая математика, но у меня есть некоторые проблемы с этим при использовании JSON.stringify() и JSON.parse().

Если вам интересно, почему я применяю функцию JSON.stringify() к дате, это связано с тем, что я использую локальное хранилище для хранения некоторых данных на стороне клиента и использую его, когда клиент снова приземляется на мой сайт (это быстрее, чем а не больше запросов на сервер). Эти данные обычно обновляются раз в то время (я захватываю данные через API с другого сайта), поэтому я настроил переменную data_update, и я сохраняю ее вместе с другими данными.

Таким образом я собираю сохраненные данные из локального хранилища и проверяю, существует ли разница между data_update (которая является датой/временем) и временем/датой при проверке, и если она больше, чем неделя/день/и т.д.

Вот почему я использую функции JSON. Моя проблема заключается в том, что когда я разбираю данные из локального хранилища, дата кажется отличной от объекта Date().

Я пытаюсь выполнить следующую операцию за сообщение:

var x = JSON.parse(JSON.stringify(new Date()));

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage

var q = y.data_update; // this is the variable where the Date() was stored

console.log(Math.floor((x-q)/1000));

Вышеуказанное вернет null. Также, когда я хочу увидеть результат Math.floor(x), он снова возвращает null.

Так что я могу сделать в этой ситуации? Есть ли исправление для этого?

Ответ 1

Если вы посмотрите на результат JSON.stringify для даты, вы увидите, что:

JSON.stringify(new Date())

Результаты в строке. JSON не имеет примитивного представления объектов Date, которые JSON.parse автоматически вернется к объекту Date.

Конструктор объекта Date может принимать строку даты, поэтому вы можете вернуть эти значения строк в даты, выполнив:

var x = new Date(JSON.parse(JSON.stringify(new Date())));

Тогда арифметика будет работать.

x = new Date(JSON.parse(JSON.stringify(new Date())))
y = new Date(JSON.parse(JSON.stringify(new Date())))
y - x
=> 982

Ответ 2

JSON.stringify(new Date())

возвращает

"2013-10-06T15: 32: 18.605Z"

Слава Богу: Date.toISOString()