Moment: Probleme mit dem Gebietsschema der Wochentage

Erstellt am 15. Juli 2017  ·  7Kommentare  ·  Quelle: moment/moment

Beschreibung des Problems und Schritte zur Reproduktion:
Wie im offiziellen Dokument
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
Bei true werden die Wochentage in gebietsschemaspezifischer Reihenfolge zurückgegeben. Aber in diesem Fall wird das Gebietsschema in dem Moment global geändert.

Wenn ich also nur das Gebietsschema lokal ändern möchte, verwende ich
moment.localeData('zh_CN').weekdaysShort()
Es listet immer die Wochentage von Sonntag bis Samstag auf Chinesisch auf (NICHT in länderspezifischer Reihenfolge). Und ich konnte der Funktion in diesem Fall keinen "wahren" Wert bereitstellen (Fehler verursachen).

Bitte geben Sie die Werte aller verwendeten Variablen an.

Umgebung:

Beispiele: Chrome 49 unter OSX, Internet Explorer 10 unter Windows 7, Node.JS 4.4.4 unter Ubuntu 16.0.4

Sowohl der Browser als auch das Betriebssystem sind uns wichtig, insbesondere wenn Sie eine ungewöhnliche Umgebung wie eine IOT-Anwendung haben.

Weitere Informationen, die hilfreich sein können:

  • Die Zeitzoneneinstellung des Geräts, auf dem der Code ausgeführt wird
  • Uhrzeit und Datum der Ausführung des Codes
  • Andere verwendete Bibliotheken (TypeScript, Immutable.js usw.)

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

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

Stellen Sie sicher, dass Ihr Problem auf den Moment beschränkt ist.

Bug Language

Hilfreichster Kommentar

Eine interessante Information ist, dass die Funktion weekday das Gebietsschema kennt, also

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

gibt ['Sunday', 'Monday', ...] für en-us .
aber ['Monday', 'Tuesday', ...] für en-gb .

Alle 7 Kommentare

Hm, das kann ich nicht reproduzieren. Ich glaube, du sagst das:

moment.locale('en') //=> "en" (I don't have the locale set to zh)

// you're saying this is NOT in the right order
moment.localeData('zh_CN').weekdays(); //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

//but if you change the global locale, then it is
moment.locale('zh_CN'); //=> "zh-cn"
moment.weekdays() //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

Ich wäre nicht überrascht, wenn es so funktionieren würde, wie Sie es gesagt haben (das localeData greift direkt auf die Daten zu, es wäre also nicht überraschend, wenn es die Neuordnung nicht durchführen würde, und möglicherweise haben wir einfach keine API dafür Abrufen der bestellten Wochentage für ein nicht global festgelegtes Gebietsschema). Aber ... sind diese Arrays nicht gleich? Ich lese oder spreche kein Chinesisch, also weiß ich nicht, ob sie in der lokal korrekten Reihenfolge sind, aber wenn ich nicht etwas übersehe (immer möglich, wenn ich mir unbekannte Zeichen anschaue), sind sie entweder beide oder nicht, richtig ?

Das gleiche gilt für "en-gb" und "en-us".

Wenn mein Gebietsschema 'en-us' ist und ich die 'en-gb'-Wochentage einschließlich der Sortierung abrufen möchte, bin ich gezwungen, das Gebietsschema global zu ändern oder Array-Arbeiten durchzuführen, um die sortierten Wochentage zu erhalten.

moment.locale('en-us')
moment.weekdays(true) // ["Sunday", "Monday", ...

moment.locale('en-gb')
moment.weekdays(true) // ["Monday", "Tuesday", ...

Aber

moment.localeData('en-us').weekdays() // ["Sunday", "Monday", ...

moment.localeData('en-gb').weekdays() // ["Sunday", "Monday", ...

Und es gibt keine

moment.localeData('en-gb').weekdays(true)

Hmm, ja, ich nenne das einen Bug.

Eine interessante Information ist, dass die Funktion weekday das Gebietsschema kennt, also

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

gibt ['Sunday', 'Monday', ...] für en-us .
aber ['Monday', 'Tuesday', ...] für en-gb .

Ich habe etwas gegraben.

Es gibt eine andere Funktion, die <Moment>.weekdays vs. <Locale>.weekdays implementiert (und ähnlich WeekdaysMin, WeekdaysShort, Monate, MonateShort).

Wie in den Dokumenten erwähnt, ist die erste dazu bestimmt, die Monate oder Wochentage des aktuellen Gebietsschemas aufzulisten.
https://momentjs.com/docs/#/i18n/listing -months-weekdays/

Die zweite dient dazu, Informationen aus dem Gebietsschema selbst zu erhalten.
https://momentjs.com/docs/#/i18n/locale -data/

Wir könnten die Wochentage mit dem gleichen Parameter nach Gebietsschema sortieren.

  • Also würde moment.localeData('en-gb').weekdays(true) ['Monday', 'Tuesday', ...] ).
  • Ich denke, das ist vernünftig, da dieser Aufruf in aktuellen Versionen von Moment einen Fehler auslöst.

Ich habe eine PR veröffentlicht - lassen Sie mich wissen, was Sie alle denken.

Gibt es einen Plan, moment().locale('en-us').weekday(0) zu reparieren, dass es Montag und nicht Sonntag zurückkehrt?

@inbalg Nein, das ist richtig

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen