Предупреждение об устаревании формата ISO при указании момента в строковом формате - PullRequest
1 голос
/ 06 мая 2020
const DATE_FORMAT = "YYYY-MM-DD";
const endDate = "2020-05-05T00:00:00.000Z" (dynamic value from service)
const appValidDate = moment(endDate).subtract(1, "days").format(DATE_FORMAT);
const currentDate = moment().startOf("day").format(DATE_FORMAT);
const validDate = moment(currentDate).isSameOrBefore(appValidDate);

Я пытался сравнить две даты, используя момент. При запуске приложения я получаю следующее предупреждение об устаревании.

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: Invalid date, _f: undefined, _strict: undefined, _locale: [object Object]
Error:

Обнаружены некоторые полезные ссылки на переполнение стека: Момент. js предупреждение об устаревании при сравнении двух дат

Но по-прежнему не удается удалить предупреждение об устаревании.

Итак, согласно do c, он должен быть в формате строка +, поэтому я сделал вот так:

const DATE_FORMAT = "YYYY-MM-DD";
const endDate = "2020-05-05T00:00:00.000Z" (dynamic value from service)
const appValidDate = moment(endDate).subtract(1, "days").format(DATE_FORMAT);
const currentDate = moment().startOf("day").format(DATE_FORMAT);
const validDate = moment(currentDate, DATE_FORMAT).isSameOrBefore(appValidDate);

Но проблема в том, что мы не можем преобразовать endDate в строку & затем вычтите дни. Если я прохожу вот так, появляется ошибка «Момент».

Кто-нибудь может помочь мне найти подходящее решение для этого. Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 06 мая 2020

Как объяснено в комментариях выше, сравнивайте даты, используя экземпляры moment.

Значение, возвращаемое .format(), является строкой и в зависимости от выбранного формата (и, возможно, вашего языкового стандарта) может запускаться предупреждение, которое вы видите.

Используйте .format(), если хотите отобразить значение.

const DATE_FORMAT = "YYYY-MM-DD";
const endDate = "2020-05-05T00:00:00.000Z" //(dynamic value from service)
const appValidDate = moment(endDate).subtract(1, "days");
const currentDate = moment().startOf("day");
// or for a UTC "start of day"
// const currentDate = moment.utc().startOf('day')
const validDate = currentDate.isSameOrBefore(appValidDate);

console.log('appValidDate:', appValidDate.format(DATE_FORMAT))
console.log('currentDate:', currentDate.format(DATE_FORMAT))
console.log('validDate:', validDate)
<script src="https://momentjs.com/downloads/moment.js"></script>
...