Moment: Problèmes de localisation des jours de la semaine

Créé le 15 juil. 2017  ·  7Commentaires  ·  Source: moment/moment

Description du problème et étapes à reproduire :
Comme dans le document officiel,
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
Si vrai, les jours de la semaine seront renvoyés dans l'ordre spécifique aux paramètres régionaux. Mais dans ce cas, le moment où les paramètres régionaux sont modifiés globalement.

Donc, si je veux juste changer les paramètres régionaux localement, j'utilise
moment.localeData('zh_CN').weekdaysShort()
Il répertorie toujours les jours de la semaine du dimanche au samedi en chinois (PAS dans l'ordre spécifique aux paramètres régionaux). Et je n'ai pas pu fournir de valeur "vraie" à la fonction dans ce cas (causant une ERREUR).

Veuillez inclure les valeurs de toutes les variables utilisées.

Environnement:

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

Le navigateur et le système d'exploitation sont tous deux importants pour nous, en particulier si vous avez un environnement inhabituel comme une application IOT.

Autres informations pouvant être utiles :

  • Le réglage du fuseau horaire de la machine sur laquelle le code s'exécute
  • L'heure et la date d'exécution du code
  • Autres bibliothèques utilisées (TypeScript, Immutable.js, etc.)

Si vous signalez un problème, veuillez exécuter le code suivant dans l'environnement que vous utilisez et inclure la sortie :

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

Assurez-vous que votre problème est isolé pour le moment.

Bug Language

Commentaire le plus utile

Une information intéressante est que la fonction weekday est sensible aux paramètres régionaux, donc

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

renvoie ['Sunday', 'Monday', ...] pour en-us .
mais ['Monday', 'Tuesday', ...] pour en-gb .

Tous les 7 commentaires

Hum, je ne peux pas reproduire ça. Je pense que tu dis ceci :

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() //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

Je ne serais pas surpris si cela fonctionnait comme vous l'avez dit (le localeData obtient directement les données, donc ce ne serait pas surprenant s'il ne faisait pas la réorganisation, et peut-être que nous n'avons tout simplement pas d'API pour obtenir les jours de la semaine commandés pour un paramètre régional non défini globalement). Mais... ces tableaux ne sont-ils pas identiques ? Je ne lis pas ou ne parle pas chinois, donc je ne sais pas s'ils sont dans l'ordre local correct, mais à moins que je manque quelque chose (toujours possible en regardant des caractères inconnus), ils le sont tous les deux ou les deux ne le sont pas, d'accord ?

C'est la même chose avec "en-gb" et "en-us".

Si mes paramètres régionaux sont « en-us » et que je souhaite obtenir les jours de semaine « en-gb », y compris le tri, je serai obligé de modifier les paramètres régionaux globalement ou de faire un travail de tableau pour obtenir les jours de semaine triés.

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

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

Mais

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

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

Et il n'y a pas

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

Hmm, ouais, j'appelle ça un bug.

Une information intéressante est que la fonction weekday est sensible aux paramètres régionaux, donc

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

renvoie ['Sunday', 'Monday', ...] pour en-us .
mais ['Monday', 'Tuesday', ...] pour en-gb .

J'ai creusé.

Il existe une fonction différente qui implémente <Moment>.weekdays vs <Locale>.weekdays (et de la même façon weekdaysMin, weekdaysShort, month, monthShort)

Comme mentionné dans la documentation, le premier est conçu pour répertorier les mois ou les jours de la semaine des paramètres régionaux actuels.
https://momentjs.com/docs/#/i18n/listing -months-weekdays/

La seconde est conçue pour obtenir des informations de la locale elle-même.
https://momentjs.com/docs/#/i18n/locale-data/

Nous pourrions trier selon les paramètres régionaux les jours de la semaine avec le même paramètre.

  • Ainsi, moment.localeData('en-gb').weekdays(true) renverrait ['Monday', 'Tuesday', ...] ).
  • Je pense que c'est raisonnable car cet appel génère une erreur dans les versions actuelles de Moment.

J'ai mis en place un PR - faites-moi savoir ce que vous en pensez tous.

Existe-t-il un plan pour corriger moment().locale('en-us').weekday(0) pour qu'il revienne le lundi et non le dimanche ?

@inbalg Non, c'est correct

Cette page vous a été utile?
0 / 5 - 0 notes