是否可以检测用户的机器使用的是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/

10-11 14:18