Javascript - 使用Intl获取当前语言环境以显示时间和日期

时间:2017-04-26 09:03:01

标签: javascript html locale

我希望我的网页能够在用户的区域设置中显示日期和时间。

现在大多数浏览器都支持Intl(请参阅Can I Use Intl)。我可以使用Intl.DateTimeFormat().resolvedOptions().timeZone获得浏览器时区。我希望我能够使用我当前的语言环境发出日期时间:



var date = new Date(2017, 11, 31, 23, 59, 59);
var format = new Intl.DateTimeFormat(
  undefined, // locale
  {
    year: "numeric",
    month: "numeric",
    day: "numeric",
    hour: "numeric",
    minute: "numeric",
  }
)

console.log(format.format(date))




我在Windows上使用Chrome。我的Windows操作系统区域设置为"捷克共和国"。我首选的网站语言设置为"捷克语"在Chrome中,但浏览器本身设置为使用美国英语。

使用这些设置,输出以12 H格式完成,就像我的语言环境是en-us一样。只要我将Chrome浏览器切换为使用捷克语作为其演示语言,时间就会切换为24格式。

我认为我必须遗漏一些明显的东西 - 网页是否真的无法使用用户正在使用的语言环境,或者这是Chrome Intl实施中的一些错误还是不完整?

1 个答案:

答案 0 :(得分:0)

我发现以下内容在Chrome上更可靠:可以使用navigator.languages[0]来获取用户偏好内容的语言定义的语言环境。有关浏览器兼容性的讨论,另请参阅Best way to determine user's locale within browser

function getLocale() {
    return (navigator.languages && navigator.languages.length) ? navigator.languages[0] : navigator.language;
}


var locale = getLocale();
var date = new Date(2017, 11, 31, 23, 59, 59);
var format = new Intl.DateTimeFormat(
  locale,
  {
    year: "numeric",
    month: "numeric",
    day: "numeric",
    hour: "numeric",
    minute: "numeric",
  }
)

console.log(format.format(date))

似乎很遗憾,无法访问用户所做的系统范围的语言环境选择。