Описание проблемы и шаги по воспроизведению:
Я использую момент, чтобы узнать возраст учетной записи пользователя, используя:
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
Если вы сообщаете о проблеме, запустите следующий код в среде, которую вы используете, и включите вывод:
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
Убедитесь, что ваша проблема изолирована на данный момент.
Как запустить свой 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'
Самый полезный комментарий
Спасибо за ответ. Я использую 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.