Moment.js Как правильно разобрать строку в объект даты и рассчитать разницу во времени? - PullRequest
0 голосов
/ 03 октября 2019

Какой-то контекст:

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

Проблема в том, что я должен сохранить сегодняшнюю дату (выполненную с var today = moment()) в виде строки в AsyncStorage, а затем извлечь эту строку в следующий раз, когда приложение будетзапускается и превращает его обратно в мгновенный объект.

Первый объект называется today, а другой - lastChecked. Когда я запускаю var dayDiff = today.diff(lastChecked, 'days'), он возвращает 0.

Я запускаю console.log для обоих объектов, и вот что он показывает. _d одинаково для обоих объектов, однако у второго объекта есть _i объект, который содержит мою желаемую дату, взятую из AsyncStorage.

Как правильно установить в объекте lastChecked эту дату и сравнитьразница в днях с использованием этой даты?

Moment {_isAMomentObject: true, _isUTC: false, _pf: {…}, _locale: Locale, _d: Thu Oct 03 2019 00:00:00 GMT+0800 (Australian Western Standard Time), …}
_d: Thu Oct 03 2019 00:00:00 GMT+0800 (Australian Western Standard Time) {}
_isAMomentObject: true
_isUTC: false
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: ƒ, …}
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}
__proto__: Object
index.js:176 

Moment {_isAMomentObject: true, _i: "2019-10-02T16:00:00.000Z", _f: "YYYY-MM-DDTHH:mm:ss.SSSSZ", _tzm: 0, _isUTC: true, …}
_d: Thu Oct 03 2019 00:00:00 GMT+0800 (Australian Western Standard Time) {}
_f: "YYYY-MM-DDTHH:mm:ss.SSSSZ"
_i: "2019-10-02T16:00:00.000Z"
_isAMomentObject: true
_isUTC: true
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: ƒ, …}
_offset: 0
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -1, charsLeftOver: 0, …}
_tzm: 0
__proto__: Object

edit: исправлено форматирование кода

1 Ответ

0 голосов
/ 04 октября 2019

Я решил проблему.

Проблема заключалась в том, что параметр LastChecked никогда не устанавливался в .startOf('day') и принимал фактическое время (в данном случае 16:00).

Расчет разницы во времени в днях вернул бы 0, поскольку функция по умолчанию возвращает только целые числа. Передав значение типа bool следующим образом: var dayDiff = today.diff(LastChecked, 'days', true) вернет значение с плавающей запятой.

В моем случае он вернул 0,66

Кроме того, если вы хотите увидеть, с какой датой оно действительно сравнивается, позвоните console.log(today.toString())

Другая проблема, которую я обнаружил, заключалась в том, что, поскольку я инициализировал объект момента LastChecked как let LastCheck = moment(), он занял текущее время. Поэтому при инициализации установите его на: let LastCheck = moment().startOf('day')

...