Описание проблемы и шаги по воспроизведению:
Как и в официальном документе,
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
Если true, дни недели будут возвращены в порядке, зависящем от локали. Но в этом случае локаль в момент меняется глобально.
Поэтому, если я просто хочу изменить локаль, я использую
moment.localeData('zh_CN').weekdaysShort()
В нем всегда указываются дни недели с воскресенья по субботу на китайском языке (НЕ в порядке, определяемом местными стандартами). И в этом случае я не смог предоставить функции «истинное» значение (Причина ОШИБКИ).
Пожалуйста, укажите значения всех используемых переменных.
Среда:
Примеры: Chrome 49 в OS X, Internet Explorer 10 в Windows 7, Node.JS 4.4.4 в Ubuntu 16.0.4.
Для нас важны и браузер, и операционная система, особенно если у вас необычная среда, такая как приложение IOT.
Другая информация, которая может быть полезна:
Если вы сообщаете о проблеме, запустите следующий код в среде, которую вы используете, и включите вывод:
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
vs <Locale>.weekdays
(и аналогично weekdaysMin, weekdaysShort, months, monthsShort)
Как упоминалось в документации, первая предназначена для перечисления месяцев или рабочих дней текущей локали.
https://momentjs.com/docs/#/i18n/listing -months-weekdays /
Второй предназначен для получения информации из самого языкового стандарта.
https://momentjs.com/docs/#/i18n/locale -data /
Мы могли бы отсортировать будние дни по языку с тем же параметром.
moment.localeData('en-gb').weekdays(true)
вернет ['Monday', 'Tuesday', ...]
).Я устроил пиар - дайте мне знать, что вы все думаете.
Есть ли план исправить moment().locale('en-us').weekday(0)
чтобы он возвращался в понедельник, а не в воскресенье?
@inbalg Нет, это правильно
Самый полезный комментарий
Интересная информация заключается в том, что функция
weekday
зависит от локали, поэтомувозвращает
['Sunday', 'Monday', ...]
дляen-us
.но
['Monday', 'Tuesday', ...]
заen-gb
.