<p>moment (). fromNow () gibt 'Ungültiges Datum' zurück.</p>

Erstellt am 7. Okt. 2018  ·  10Kommentare  ·  Quelle: moment/moment

Beschreibung des Problems und der zu reproduzierenden Schritte:
Ich verwende den Moment, um das Alter eines Benutzerkontos zu ermitteln, indem ich Folgendes verwende:
moment(user account created date here).fromNow() aber es wird 'Ungültiges Datum' zurückgegeben. Das hat vorher funktioniert, aber es funktioniert nicht mehr. Das Erstellungsdatum sieht ungefähr so ​​aus: 2018-06-07T22:54:07.310Z .
Die Verwendung von moment(date here).format() funktioniert einwandfrei.
Bitte geben Sie die Werte aller verwendeten Variablen an.
Das Datum, an dem ich fromNow formatiere und verwende, ist 2018-06-07T22:54:07.310Z
Umgebung:
Discord Bot
Beispiele: Chrome 49 unter OSX, Internet Explorer 10 unter Windows 7, Node.JS 4.4.4 unter Ubuntu 16.0.4
Ich benutze den Moment nicht für irgendetwas, das oben aufgeführt ist.
Sowohl der Browser als auch das Betriebssystem sind für uns wichtig, insbesondere wenn Sie eine ungewöhnliche Umgebung wie eine IOT-Anwendung haben.

Weitere hilfreiche Informationen: https://i.imgur.com/4LFsZh3.png

  • Die Zeitzoneneinstellung der Maschine, auf der der Code ausgeführt wird: PST
  • Uhrzeit und Datum, an dem der Code ausgeführt wurde: 12:20 Uhr, 07.10.18
  • Andere verwendete Bibliotheken (TypeScript, Immutable.js usw.) Keine

Wenn Sie ein Problem melden, führen Sie den folgenden Code in der von Ihnen verwendeten Umgebung aus und fügen Sie die Ausgabe hinzu:

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

So 07.10.2018 12:29:05 GMT-0700 (pazifische Sommerzeit)
2018-10-7 12:29:05
420
2.22.2
Stellen Sie sicher, dass Ihr Problem momentan isoliert ist.

Bug

Hilfreichster Kommentar

Danke für die Antwort. Ich verwende NodeJS, daher gibt es keine Navigatorumgebung.

neues Datum ()). toString () Do 17. Januar 2019 06:53:11 GMT-0600 (Zentrale Standardzeit)
neues Datum ()). toLocaleString (): 17.01.2019, 06:53:11 Uhr
neues Datum ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS ist v11.6.0

Ich habe einige Tests durchgeführt und der Konflikt ist ein Object.prototype-Konstruktor.

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

Alle 10 Kommentare

Wie lässt du deinen Discord Bot laufen?

Sie sagten: _ "Das hat vorher funktioniert, aber es funktioniert nicht mehr" _
Hat sich etwas geändert, seit es funktioniert hat - z. B. haben Sie die Umgebung aktualisiert, in der Ihr Discord-Bot ausgeführt wird? Hat sich das Format des Erstellungsdatums des Benutzerkontos geändert?

Können Sie Ihren Discord-Bot-Code so ändern, dass die folgenden Ausgaben angezeigt werden (insbesondere mit fest codierten Zeichenfolgen):

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

Es hat funktioniert, bevor es einfach aufgehört hat. Kein Code geändert. Mit dem Bot hat sich keine Umgebung verändert. Die Art und Weise, wie die Daten analysiert werden, scheint ebenfalls dieselbe zu sein.

Und hier ist, was die Konsole ausgegeben hat;

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

und so habe ich es benutzt ( this.client.moment ist, wie ich den Moment definiert habe):

 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());

Ich bin mir nicht sicher, ob ich es erwähnt habe oder nicht, aber hier sind die aktuellen Versionen, die ich verwende:
"Moment": "^ 2.22.2",
"Moment-Dauer-Format": "^ 2.2.2"
und ich bin auf v8.9.2 von node

Ich habe ein ähnliches Problem mit Angular 6 (ionische App) und Moment 2.22.2 gibt ein ungültiges Datum für etwas so Einfaches wie dieses zurück.
moment(new Date()).fromNow();
Bitte beraten.

Geschieht immer noch in 2.23.0

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

Vielen Dank für das Öffnen dieser Anfrage
Hallo! Vielen Dank für die Einreichung dieser Ausgabe! Leider kann ich das nicht reproduzieren. Könnten Sie weitere Informationen bereitstellen?

Es ist hilfreich, wenn Sie diese Zeilen auf Ihren Computern ausführen:

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

Danke für die Antwort. Ich verwende NodeJS, daher gibt es keine Navigatorumgebung.

neues Datum ()). toString () Do 17. Januar 2019 06:53:11 GMT-0600 (Zentrale Standardzeit)
neues Datum ()). toLocaleString (): 17.01.2019, 06:53:11 Uhr
neues Datum ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS ist v11.6.0

Ich habe einige Tests durchgeführt und der Konflikt ist ein Object.prototype-Konstruktor.

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

Ich bin auch davon betroffen.
Zuerst glaubte ich, dass die Verwendung eines unvollständigen Unix-Zeitstempels (wie mir die Daten zur Verfügung gestellt werden) im Konstruktor die Ursache war, aber beim Testen des Beispielcodes in der MomentJS-Dokumentation stellte ich fest, dass jeder Aufruf von fromNow() gab Invalid Date .

Selbes Problem hier.

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

Gleiches hier auf "moment": "^2.24.0", . Es funktioniert gut, wenn es im Browser ausgeführt wird, schlägt jedoch in nodejs fehl. Irgendeine Problemumgehung bis zur Behebung? @ Marwahaha

Es ist ein Hack, aber Sie können die Object.prototype -Erweiterungen ändern, damit sie nicht aufgezählt werden können:

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'
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen