Moment: Возникает ошибка преобразования даты Momemtjs.

Созданный на 8 окт. 2016  ·  18Комментарии  ·  Источник: moment/moment

Описание проблемы и шаги для воспроизведения:
console.log('>>>>>>.', момент (значение).format ('ММ-ДД-ГГГГ'), момент (значение).format ('ГГГГ-ММ-ДД'));

Я не уверен, где возникла эта ошибка, не могу отследить. Я добавил предупреждающее сообщение.

Окружающая обстановка:
Убунту, браузер хром.

ПОЛУЧЕНИЕ НИЖЕ ПРОБЛЕМЫ

Предупреждение об устаревании: предоставленное значение не соответствует распознаваемому формату ISO. Момент построения возвращается к js Date(), который не надежен во всех браузерах и версиях. Форматы даты, отличные от ISO, не рекомендуются и будут удалены в следующем основном выпуске. Пожалуйста, обратитесь к http://momentjs.com/guides/#/warnings/js -date/ для получения дополнительной информации.
Аргументы:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: не определено, _i: 27.04.2016, _f: не определено, _strict: не определено, _locale: [объект Объект]
Ошибка

Самый полезный комментарий

Кажется, что moment(new Date("27/04/2016")).format.... работает. Но я думаю, что в этом подходе есть некоторые проблемы, возможно, связанные с локалями и т. д.

Все 18 Комментарий

Это предупреждающее сообщение появляется, когда вы создаете момент из строки, формат которой не поддерживается стандартом ISO 8601 (см. http://momentjs.com/docs/#/parsing/string/ для получения списка поддерживаемых форматов).

В этом случае похоже, что вы пытались проанализировать строку 27/04/2016 , которая не является форматом ISO. Вы можете разобрать этот формат без предупреждения, если вы сообщите Moment, что это за формат: moment("27/04/2016", "DD/MM/2016") . Кроме того, вы можете изменить формат ввода в соответствии со спецификацией ISO: moment("2016-04-27")

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

У меня не получается, когда я делаю поддерживаемый формат ISO 8601

Кажется, что moment(new Date("27/04/2016")).format.... работает. Но я думаю, что в этом подходе есть некоторые проблемы, возможно, связанные с локалями и т. д.

@ziaulrehmandevsinc Работал на меня. Спасибо.

@ziaulrehmandevsinc Мне тоже помогло, спасибо

@ziaulrehmandevsinc У меня это тоже сработало. Большое спасибо

Работал на меня. Спасибо

На данный момент мы бы предпочли не изменять код для решения этой проблемы. Внутри moment.js отображается предупреждение:

функция предупреждения (сообщение) {
если (hooks.suppressDeprecationWarnings === false &&
(тип консоли !== 'undefined') && console.warn) {
console.warn('Предупреждение об устаревании: ' + msg);
}

Как установить «hooks.suppressDeprecationWarnings»? Я просмотрел функцию ловушек, но она сообщает, что крючки не являются функцией. Использование аурелии.

Спасибо

@pdesimone

// Suppress the warnings
const moment = require('moment');
moment.suppressDeprecationWarnings = true;

// See what else you can mess with
console.log(Object.keys(require('moment')));

Да, я получаю эту проблему, используя moment('2018-01-20') , который, насколько я могу судить, является допустимым форматом ISO 8601.

В то время я не мог заставить работать SupressDepreciationWarnings или другие решения.

Я делал это во всех случаях использования момента:

момент (значение, формат), то есть: значение: 2018-01-20, формат: ГГГГ-ММ-ДД.

Тогда предупреждения не будет. По-видимому, если вы позволите моменту «попробовать» и выяснить тип даты, вы получите предупреждение...

@ziaulrehman40 работал на меня, большое спасибо

Если вы считаете, что все делаете правильно, но по-прежнему видите ошибку, дважды проверьте, что ваши типы ввода <input type="date" /> будут выдавать ошибку, но <input type="text" /> работает.

@pdesimone

// Suppress the warnings
const moment = require('moment');
moment.suppressDeprecationWarnings = true;

// See what else you can mess with
console.log(Object.keys(require('moment')));

Спасибо: все работает нормально, но мне нужно знать, вызовет ли это какие-либо проблемы при добавлении предупреждения об устаревании.

Спасибо, @ziaulrehman40 - :kissing_heart:

Вместо того, чтобы подавлять предупреждения, преобразуйте объект даты в строку ISO, прежде чем форматировать его, используя момент

 const moment = require('moment');

const dateFormatString = "YYYY-MM-DD";

function formatDate(dateObject) {
    var formatted = moment(dateObject.**toISOString()**).format(dateFormatString);
    return formatted;
}
var d = new Date();
var fd = formatDate(d);

console.log(fd);

Проверьте это на Repl.it

У меня тоже с этим беда.

console.log(moment(this.entities[i].created_at).isValid());
this.entities[i].created_at = moment(this.entities[i].created_at).format("DD-MM-YYYY HH:mm");

Журнал консоли возвращает true , но я получаю сообщение об ошибке:

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: 21-05-2020 19:43, _f: undefined, _strict: undefined, _locale: [object Object]

console.log на дату получения возвращает 2020-05-21 19:43:58.099745+00 .
Какие-либо предложения?

@kiocosta Извините, у вас проблемы. Вероятно, вам следует разобрать формат. https://momentjs.com/docs/#/parsing/string -format/ Это может быть хорошим вопросом и для переполнения стека .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги