JQuery UI DatePicker change подсвечивает дату "сегодня"

Я хотел бы явно изменить выделенную сегодня дату в jQuery Datepicker. Я пробовал установить дату по умолчанию, но все же выделенная дата - это дата моего локального компьютера, которая сегодня.

Я хотел бы сделать это, потому что я использую пользовательский часовой пояс. В основном текущий год/месяц/дата в этом пользовательском часовом поясе отличается от текущей текущей даты локального компьютера.

Eg.

Скажем, сегодня дата 07/10/2014 такая же, как и дата моего компьютера, но с использованием пользовательского часового пояса сегодняшняя дата должна быть 07/09/2014:

enter image description here

Ответ 1

К сожалению, "Today" рассчитан на этапе HTMLRendering DatePicker, это означает, что для "переопределения" вам нужно переопределить метод _generateHTML $.datepicker. Ive также обнаружил, что кнопка "Сегодня" в нем по умолчанию отключена этим переопределением, поэтому также необходимо переопределить этот метод.

В основном datepicker устанавливает внутреннюю переменную, подобную этой "tempDate = new Date()", а затем использует ее для создания "сегодня". Все, что мы делаем, это переопределить эту переменную с помощью некоторого кода коррекции временного интервала, а остальные сами сортируются.

В приведенном ниже примере вверху находится переменная для appLocalTimezone, установите ее в желаемый часовой пояс, и она обновит datepicker на основе приложения. Весь кредит за оригинальный код/​​ответы в скрипте

jsFiddle Demo

Ответ 2

Небольшая настройка для @haxxxton, которая позволяет вам передать localToday в качестве параметра в datepicker.

// Get users 'today' date
var localToday = new Date();
localToday.setDate(tomorrow.getDate()+1); // tomorrow

// Pass the today date to datepicker
$( "#datepicker" ).datepicker({
    showButtonPanel: true,
    localToday: localToday    // This option determines the highlighted today date
});

Я переопределил 2 метода datepicker, чтобы условно использовать новый параметр для "сегодняшней" даты вместо new Date(). Новая настройка называется localToday.

Переопределить $.datepicker._gotoToday и $.datepicker._generateHTML следующим образом:

$.datepicker._gotoToday = function(id) {
    /* ... */
    var date = inst.settings.localToday || new Date()
    /* ... */
}

$.datepicker._generateHTML = function(inst) {
    /* ... */
    tempDate = inst.settings.localToday || new Date()
    /* ... */
}

Здесь демонстрация, которая показывает полный код и использование: http://jsfiddle.net/NAzz7/5/

Ответ 3

используйте $( ".selector" ).datepicker({defaultDate: -1});