Специальная дата JQuery Tablesorter

Это решение работает в большинстве браузеров, но ошибки в 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");
    }
}
1
задан Dance Along 13 July 2018 в 16:03
поделиться

1 ответ

Я нашел тип только для числового и текстового. Возможно, я ошибаюсь, но я придерживаюсь числа и отказываюсь от изменения его на сегодняшний день.

Код здесь, и он работает для меня.

$.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" }
    }
    }
    );    

Спасибо!

1
ответ дан Dance Along 17 August 2018 в 12:26
поделиться
  • 1
    Это должно сработать. Парсер установлен в "числовой" и сортирует анализируемые значения как число, но возвращает строковое значение; это все равно не должно вызывать никаких проблем, если числа являются & lt; 10. Что касается онлайн-демонстрации, ознакомьтесь с кодом парсера классов здесь . – Mottie 13 July 2018 в 23:17
Другие вопросы по тегам:

Похожие вопросы: