是否可以检测用户的机器使用的是12小时制(am/pm)还是24小时制(军用时间)?
一种方法是检查用户的语言环境,但是这只是大量的语言环境比较列表,而美国某人想要12小时制只能向我发送语言环境,而不是US_en,因此我无法得知她的偏好。同时,可能有人将美国某人的计算机设置为使用12小时制,并且不希望使用12小时制。
编辑:
date.toLocaleTimeString();
就像用户Mouser在下面建议的那样,它将在理论上起作用,但不幸的是,它在WebKit浏览器(在Chrome和Windows的新Opera上进行了测试)上是bugged,由于某种原因总是返回am/pm时间。
示例:http://jsfiddle.net/sjuaL3p4/
因此,我想我必须重新回答我的问题,如果有人也想知道如何在Webkit浏览器上实现它。
最佳答案
该解决方案适用于大多数浏览器,但适用于Chrome。
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
var dateString = date.toLocaleTimeString();
//apparently toLocaleTimeString() has a bug in Chrome. toString() however returns 12/24 hour formats. If one of two contains AM/PM execute 12 hour coding.
if (dateString.match(/am|pm/i) || date.toString().match(/am|pm/i) )
{
//12 hour clock
console.log("12 hour");
}
else
{
//24 hour clock
console.log("24 hour");
}
解决方法Chrome;概念证明
对于Chrome,这是一个丑陋的解决方法。它通过
country_code
嗅探用户reverse geolocation
。使用12小时制将代码与包含国家/地区的阵列进行检查。该解决方案很丑陋,因为您需要获得用户许可才能获取地理位置数据,并且如果用户区域设置不同,它将提供错误的信息,但会为您提供用户所在的国家/地区。 我强烈建议您不要使用此示例。它纯粹是出于启发目的。我把它作为概念证明。 function getClockChrome() {
navigator.geolocation.getCurrentPosition(function(pos) {
var url = "http://nominatim.openstreetmap.org/reverse?format=json&lat="+pos.coords.latitude+"&lon="+pos.coords.longitude+"&addressdetails=1&accept-language=en_US&json_callback=chromeClockCallBack";
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
},
function()
{
//no access to location
},
{
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
}
);
}
getClockChrome();
var dateCountryCode = ['US', 'GB', 'PH', 'CA', 'AU', 'NZ', 'IN', 'EG', 'SA', 'CO', 'PK', 'MY'];
function chromeClockCallBack(data)
{
//Request succeeded
if (dateCountryCode.indexOf(data.address.country_code.toUpperCase()) > -1)
{
alert("12 hour clock");
}
else
{
alert("24 hour clock");
}
}
关于javascript - 使用javascript检测用户的机器是否使用12小时制(am/pm)或24小时制(军用时间),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27647918/