問題の説明と再現手順:
公式文書のように、
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
trueの場合、平日はロケール固有の順序で返されます。 ただし、この場合、瞬間ロケールはグローバルに変更されます。
したがって、ロケールをローカルで変更したいだけの場合は、
moment.localeData('zh_CN').weekdaysShort()
日曜日から土曜日までの平日を中国語で常にリストします(ロケール固有の順序ではありません)。 そして、この場合、関数に「true」値を提供できませんでした(エラーの原因)。
使用するすべての変数の値を含めてください。
環境:
例:OSX上のChrome 49、Windows7上のInternetExplorer 10、Ubuntu16.0.4上のNode.JS4.4.4
特にIOTアプリケーションのような異常な環境がある場合は、ブラウザとOSの両方が私たちにとって重要です。
役立つ可能性のあるその他の情報:
問題を報告している場合は、使用している環境で次のコードを実行し、出力を含めてください。
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
問題が瞬間的に分離されていることを確認してください。
うーん、これは再現できません。 私はあなたがこれを言っていると思います:
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() //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
あなたが言ったように機能したとしても驚かないでしょう(localeDataはデータを直接取得しているので、並べ替えを行わなくても驚くことではありません。おそらく、APIがないだけです。グローバルに設定されていないロケールの順序付けられた平日を取得します)。 しかし...それらの配列は同じではありませんか? 私は中国語を読んだり話したりしないので、それらがローカルで正しい順序であるかどうかはわかりませんが、何かが足りない場合を除いて(見慣れない文字を見ると常に可能です)、両方ともそうであるか、そうではありません。 ?
「en-gb」や「en-us」も同じです。
ロケールが「en-us」で、並べ替えを含めて「en-gb」の平日を取得したい場合は、ロケールをグローバルに変更するか、配列作業を行って並べ替えられた平日を取得する必要があります。
moment.locale('en-us')
moment.weekdays(true) // ["Sunday", "Monday", ...
moment.locale('en-gb')
moment.weekdays(true) // ["Monday", "Tuesday", ...
だが
moment.localeData('en-us').weekdays() // ["Sunday", "Monday", ...
moment.localeData('en-gb').weekdays() // ["Sunday", "Monday", ...
そして、ありません
moment.localeData('en-gb').weekdays(true)
うーん、ええ、私はこれをバグと呼んでいます。
興味深い情報は、 weekday
関数がロケールを認識していることです。
const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))
リターン['Sunday', 'Monday', ...]
についてen-us
。
ただし、 ['Monday', 'Tuesday', ...]
場合はen-gb
です。
掘りました。
<Moment>.weekdays
と<Locale>.weekdays
を実装する別の関数があります(同様にweekdaysMin、weekdaysShort、months、monthsShort)
ドキュメントに記載されているように、最初のものは現在のロケールの月または平日をリストするように設計されています。
https://momentjs.com/docs/#/i18n/listing -months-weekdays /
2つ目は、ロケール自体から情報を取得するように設計されています。
https://momentjs.com/docs/#/i18n/locale -data /
同じパラメータで平日をロケールソートできます。
moment.localeData('en-gb').weekdays(true)
は['Monday', 'Tuesday', ...]
を返します)。私はPRを出しました-皆さんの考えを教えてください。
moment().locale('en-us').weekday(0)
を修正して、日曜日ではなく月曜日に戻る予定はありますか?
@inbalgいいえ、その通りです
最も参考になるコメント
興味深い情報は、
weekday
関数がロケールを認識していることです。リターン
['Sunday', 'Monday', ...]
についてen-us
。ただし、
['Monday', 'Tuesday', ...]
場合はen-gb
です。