<p>moment (). fromNow () возвращает "Недействительную дату"</p>

Созданный на 7 окт. 2018  ·  10Комментарии  ·  Источник: moment/moment

Описание проблемы и шаги по воспроизведению:
Я использую момент, чтобы узнать возраст учетной записи пользователя, используя:
moment(user account created date here).fromNow() но возвращает "Недействительную дату". Раньше это работало, но больше не работает. Дата создания выглядит примерно так: 2018-06-07T22:54:07.310Z .
Использование moment(date here).format() отлично работает.
Пожалуйста, укажите значения всех используемых переменных.
Дата, которую я использую для форматирования и использования fromNow: 2018-06-07T22:54:07.310Z
Окружающая обстановка:
Discord Bot
Примеры: Chrome 49 в OS X, Internet Explorer 10 в Windows 7, Node.JS 4.4.4 в Ubuntu 16.0.4.
Я не использую момент ни для чего из перечисленного выше.
Для нас важны и браузер, и ОС, особенно если у вас необычная среда, например, приложение IOT.

Другая информация, которая может быть полезна: https://i.imgur.com/4LFsZh3.png

  • Настройка часового пояса машины, на которой выполняется код: PST
  • Время и дата запуска кода: 12:20, 07.10.18.
  • Другие используемые библиотеки (TypeScript, Immutable.js и т. Д.) Нет

Если вы сообщаете о проблеме, запустите следующий код в среде, которую вы используете, и включите вывод:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

Вс, 07 окт 2018, 12:29:05 GMT-0700 (Тихоокеанское летнее время)
2018-10-7 12:29:05
420
2.22.2
Убедитесь, что ваша проблема изолирована на данный момент.

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

Спасибо за ответ. Я использую NodeJS, поэтому среды навигатора нет.

new Date ()). toString () Thu Jan 17 2019 06:53:11 GMT-0600 (Центральное стандартное время)
новая дата ()). toLocaleString (): 17.01.2019, 6:53:11
новая дата ()). getTimezoneOffset (): 360
момент.версия: 2.23.0
NodeJS - это v11.6.0

Я проводил некоторое тестирование, и конфликт - это конструктор Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

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

Как запустить свой Discord Bot?

Вы сказали: _ "Это работало раньше, но больше не работает" _
Изменилось ли что-нибудь с тех пор, как это сработало - например, обновили ли вы среду, в которой работает ваш Discord-бот? Изменился ли формат «даты создания учетной записи пользователя»?

Можете ли вы изменить код своего бота Discord, чтобы отобразить результат ниже (в частности, используя жестко заданные строки):

console.log('moment.format:', moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', moment("2018-06-07T22:54:07.310Z").fromNow());

Он работал до этого просто перестал. Код не изменился. Окружение с ботом не изменилось. То, как анализируются даты, тоже похоже.

И вот что выдала консоль;

moment.format: 2018-06-07T15:54:07-07:00
moment.fromNow: Invalid date

и вот как я его использовал ( this.client.moment - вот как я определил момент):

 console.log('moment.format:', this.client.moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', this.client.moment("2018-06-07T22:54:07.310Z").fromNow());

Не уверен, упомянул я об этом или нет, но вот текущие версии, которые я использую:
"момент": "^ 2.22.2",
"формат продолжительности момента": "^ 2.2.2"
и я нахожусь на v8.9.2 узла

У меня аналогичная проблема с Angular 6 (приложение на основе ionic), и момент 2.22.2 возвращает недопустимую дату для чего-то такого простого.
moment(new Date()).fromNow();
пожалуйста, порекомендуйте.

Все еще происходит в 2.23.0

time = moment('2017-08-08T18:29:07.000Z')
time.isValid() // true
time.toNow() // Invalid date
time.fromNow() // Invalid date

Спасибо за открытие этого запроса
Привет! Благодарим за отправку этого вопроса! К сожалению, я не могу воспроизвести это. Не могли бы вы предоставить другую информацию?

Это поможет, если вы запустите эти строки на своих машинах:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

Спасибо за ответ. Я использую NodeJS, поэтому среды навигатора нет.

new Date ()). toString () Thu Jan 17 2019 06:53:11 GMT-0600 (Центральное стандартное время)
новая дата ()). toLocaleString (): 17.01.2019, 6:53:11
новая дата ()). getTimezoneOffset (): 360
момент.версия: 2.23.0
NodeJS - это v11.6.0

Я проводил некоторое тестирование, и конфликт - это конструктор Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

На меня это тоже влияет.
Сначала я считал, что причиной является использование неполной временной метки unix (как данные предоставляются мне) в конструкторе, но после тестирования кода примера в документации MomentJS я обнаружил, что любой вызов fromNow() вернул Invalid Date .

Здесь та же проблема.

toString Tue Jan 07 2020 10:20:09 GMT+0100 (Central European Standard Time)
toLocaleString 1/7/2020, 10:20:09 AM
getTimezoneOffset -60
navigator.userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
moment.version 2.24.0

То же самое здесь на "moment": "^2.24.0", . Он отлично работает при запуске в браузере, но не работает в nodejs. Какое-либо решение, пока не будет исправлено? @marwahaha

Это взлом, но вы можете изменить расширения Object.prototype чтобы их нельзя было перечислить:

console.log(moment().fromNow()); // 'a few seconds ago'
Object.prototype.randomExtension = true;
console.log(moment().fromNow()); // 'Invalid date'

Object.keys(Object.prototype).forEach(function(extension) {
  Object.defineProperty(Object.prototype, extension, { enumerable: false });
});

console.log(moment().fromNow()); // 'a few seconds ago'
Была ли эта страница полезной?
0 / 5 - 0 рейтинги