我希望我的网页能够在用户的区域设置中显示日期和时间。
现在大多数浏览器都支持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实施中的一些错误还是不完整?
答案 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))
似乎很遗憾,无法访问用户所做的系统范围的语言环境选择。