Я использую следующий код для преобразования серверной даты и времени в местное время с помощью moment.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Но я получаю:
Предупреждение об устаревании: момент постройки возвращается к js Date. Это не рекомендуется и будет удалено в следующем основном выпуске. Пожалуйста, обратитесь к https://github.com/moment/moment/issues/1407 для получения дополнительной информации.
Кажется, я не могу избавиться от этого! Как я могу это исправить?
javascript
date
momentjs
Дариуш
источник
источник
Ответы:
Чтобы избавиться от предупреждения, вам необходимо:
Передайте версию вашей даты в формате ISO:
moment('2014-04-23T09:54:51');
Передайте строку, которая у вас есть, но скажите Моменту, в каком формате находится строка:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Преобразуйте вашу строку в объект JavaScript Date, а затем передайте ее в Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
Последний вариант - это встроенный запасной вариант, который Moment пока поддерживает, с устаревшим предупреждением консоли. Они говорят, что не будут поддерживать этот запасной вариант в будущих выпусках. Они объясняют, что использование
new Date('my date')
слишком непредсказуемо.источник
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
нормально? Или я просто подавляю проблему, готовую молча потерпеть крах в ближайшем будущем, как это?Invalid
даты.В качестве альтернативы вы можете отключить отображение предупреждения об устаревании, установив
moment.suppressDeprecationWarnings = true;
источник
// @ts-ignore
(по крайней мере, для некоторых версий момент-часовой пояс и @ types / момент-часовой пояс).Конструкция даты во
moment
внутреннем используетnew Date()
в JavaScript.new Date()
Конструкция распознает строку даты в любом RFC2822 или ISO форматов во всех браузерах. При созданииmoment
объекта с датой не в этих форматах выдается предупреждение об устаревании.Несмотря на то, что предупреждения об устаревании выдаются, для некоторых форматов
moment
объект будет успешно создан в Chrome, но не в Firefox или Safari. Из-за этого обработка даты в Chrome может дать ожидаемые результаты (не всегда) и добавитьInvalid Date
другие.Рассмотрим
02.02.2018
,Chrome -
moment("02.02.2018")._d
->Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
Firefox -
moment("02.02.2018")._d
->Invalid Date
Сафари -
moment("02.02.2018")._d
->Invalid Date
Таким образом,
moment.js
используется на ваш страх и риск, если рекомендуемые / стандартные форматы не используются.Чтобы подавить предупреждения об устаревании ,
moment
строительства.Пример :
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Пример:
moment("2018-02-01T18:30:00.000Z")
- Формат ISOmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- RFC2822 Формат - Формат в Githubmoment.suppressDeprecationWarnings = true;
Я предлагаю перезаписать запасной вход в момент.
Поскольку (3) будет подавлять все предупреждения, (4) будет подавлять только запасной вариант построения даты. Используя (4), вы получите,
Invalid Date
как используется внутреннее,new Date()
и другие устаревшие элементы будут видны в консоли, так что момент может быть обновлен или устаревшие методы могут быть заменены в приложении.источник
Если ваша дата передается вам из API как
string
(например, моя проблема), вы можете использовать фильтр для преобразования строки в дату на данный момент. Это позаботится о моменте предупреждения о строительстве.Добавьте это к представлению:
источник
Как указано в ответах выше. Предоставление формата даты должно работать.
Почему я получаю сообщение об устаревании со следующей строкой кода. Я думал, что формат String + должен был исправить проблему.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
, Кроме того, пожалуйста, не контролируйте формат даты. Я знаю, что могу преобразовать его сам, чтобы в тот'YYYY-MM-DDTHH:mm:ss'
момент не отображалось сообщение об устаревании. Однако, согласно документации, строка кода должна работать. Вот сообщение об устаревании, которое я вижу.источник