Это решение работает в большинстве браузеров, но ошибки в 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
}
else
{
//24 hour clock
}
Обходной 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");
}
}
Я нашел тип только для числового и текстового. Возможно, я ошибаюсь, но я придерживаюсь числа и отказываюсь от изменения его на сегодняшний день.
Код здесь, и он работает для меня.
$.tablesorter.addParser({
// set a unique id
id: 'term',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format your data for normalization
text = s.split(' ');
s=text[1] + text[0];
return s.toLowerCase()
.replace(/wint/, 1)
.replace(/sumr/, 7)
.replace(/spr/, 3)
.replace(/fall/, 9);
},
// set type, either numeric or text
type: 'numeric'
});
$(".tablesorter").tablesorter({
headers: {
1: { sorter: "term" }
}
}
);
Спасибо!