我使用date.toLocaleDateString(locale)
方法来获取用户的日期格式。我在服务器端使用Accept-Language标头和地理编码的IP地址(浏览器似乎默认为en-US,即使您在美国以外)的混合获取用户的区域设置。但是toLocaleDateString()似乎不能识别所有的地区,也就是说,如果你做date.toLocaleDateString('en-IE')
,你会得到美国日期格式而不是欧洲日期格式。Intl.Collator.supportedLocalesOf('en-IE', {localeMatcher: 'lookup'})
不起作用。是否有浏览器支持的语言环境列表?
顺便说一句,我已经在OSX上的Chrome和Firefox上试过了。
我认为您遇到的问题是supportedLocalesOf()只检查语言,而不是区域设置(换句话说,就是"语言标记"的最开始)。如果您指定了另一个不受支持的英语语言区域设置,日期格式化函数将默默地返回到'en-us'(而不是在指定不同的语言时抛出异常)。API的这两个奇怪之处(委婉地说)使得它有可能在不知情的情况下为用户提供看起来正确但实际上是错误的日期。
这个问题已经问了好几年了(我在注意到之前就开始回答了),现在浏览器对语言环境数据的支持已经很好了,但是语言环境数据的变化可能总是会发生。
对于Node来说,支持仍然很差——最近这让我很难受,我想其他人也会很难受。在v13之前,Node的官方版本只包括对'en-US'的支持(请参阅v13更新日志中的'build')。
值得注意的是,区域设置支持的包含是依赖于构建的,因此,尽管从v13开始,它已包含在正式的Node构建中,但区域设置数据实际上相当大,因此其他版本(例如:FaaS产品(如Lambda或Firebase Functions)可能会对权衡做出不同的决定。因此,像往常一样,最好使用这个函数进行测试,而不是检查您的Node版本。