问题描述和重现步骤:
正如官方文件中所说,
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
如果为 true,则工作日将按区域设置特定顺序返回。 但在这种情况下,区域设置在全局更改的那一刻。
因此,如果我只想在本地更改语言环境,我会使用
moment.localeData('zh_CN').weekdaysShort()
它总是用中文列出从周日到周六的工作日(不是按区域设置的特定顺序)。 在这种情况下,我无法为函数提供“真”值(导致错误)。
请包括使用的所有变量的值。
环境:
示例:OSX 上的 Chrome 49、Windows 7 上的 Internet Explorer 10、Ubuntu 16.0.4 上的 Node.JS 4.4.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'))
为en-us
返回['Sunday', 'Monday', ...]
en-us
。
但是['Monday', 'Tuesday', ...]
为en-gb
。
我做了一些挖掘。
有一个不同的函数实现了<Moment>.weekdays
与<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', ...]
)。我已经提出了 PR - 让我知道你们的想法。
是否有计划将moment().locale('en-us').weekday(0)
修复
@inbalg不,那是正确的
最有用的评论
一个有趣的信息是
weekday
函数是语言环境感知的,所以为
en-us
返回['Sunday', 'Monday', ...]
en-us
。但是
['Monday', 'Tuesday', ...]
为en-gb
。