Bootstrap date range picker получить текущую дату, на которую наведена мышь
ЭТОТ ВЫБОР ДАТЫ ИМЕЕТ ФУНКЦИОНАЛЬНОСТЬ IM AFTER.
http://www.daterangepicker.com/
Но я использую Этот плагин , как мне получить текущую дату, на которую наведена мышь? Например, если я наведу курсор на 23 февраля 2016 года, как мне получить дату 23-го? getDate не срабатывает, пока я не нажму на дату. Итак, текущая дата на Ховере? Большое спасибо
Примечание
У меня есть jquery-ui и bootstrap datepicker оба на одной странице, так что был конфликт. Для разрешения конфликта я использую bootstrapDP вместо datepicker.
МОЙ HTML
<div class="home-check-in">
<div class="search-form-group calendar">
<span class=" date-dropdown-select">
<div class="input-daterange input-group" id="datepicker2">
<input type="text" required readonly class="input-group form-control" placeholder="dd/mm/yyyy" id="FromDate" name="start" />
<span class="input-group-addon"></span>
<input type="text" required readonly class="input-group form-control" placeholder="dd/mm/yyyy" id="ToDate" name="end" />
</div>
</span> </div>
</div>
МОЙ JS
$('.input-daterange').bootstrapDP({
startDate: "+0d",
defaultViewDate : "+0d",
format: "dd-M-yyyy",
maxViewMode: 3,
autoclose: true,
orientation: "bottom auto",
disableTouchKeyboard:true,
}).on("changeDate", function() {
$("#ToDate").focus(); //popup up end date calendar
var selectedFromDate = $('#FromDate').bootstrapDP("getDate");
var selectedToDate = $('#ToDate').bootstrapDP("getDate");
$("#from").val(dateFormat(selectedFromDate,'yyyy-mm-dd'));
$("#to").val(dateFormat(selectedToDate,'yyyy-mm-dd'));
});
4 ответов:
Datepicker сохраняется как атрибут данных HTML на
input, к которому он привязан, и, таким образом, доступен с:Проверка объектаvar datepicker = $('input[name="date"]').data('datepicker');datepickerпоказывает нам два полезных свойства, первое из которых-свойствоviewDate. Это просто сохраняет дату текущего месячного представления (без определенного дня, но это не имеет значения на данном этапе, поскольку мы собираемся программно установить это). Второе свойство, которое нам нужно, - это свойствоpicker. Это дает нам узел DOM, который подборщик существует как:var element = datepicker.picker;И оттуда это простой DOM обход, чтобы добраться до элементов day (все они
TDэлементы с классом 'day'):var days = element.find('td.day');Таким образом, собрав все это вместе, вы можете получить текущий день, над которым нависает:
Затем мы должны иметь дело с тем фактом, что клеткиvar datepicker = $('input[name="date"]').data('datepicker'), element = datepicker.picker; element.on('mouseover', 'td.day', function(e) { var day = parseInt($(this).html(), 10); });dayмогут относиться к предыдущему или следующему месяцу. К счастью, это подчеркивается наличием классовold(для прошлого месяца) иnew(для следующий месяц).Используя эту информацию в сочетании со свойством
viewDate, которое мы обсуждали выше, мы можем выполнить некоторые манипуляции с датой, чтобы установить текущую дату, зависшую над ней (обратите внимание на дополнительные проверки, чтобы убедиться, что мы меняем год и месяц, если переходим вперед / назад на месяц от первого или последнего месяца года):var datepicker = $('input[name="date"]').data('datepicker'), element = datepicker.picker; element.on('mouseover', 'td.day', function(e) { var hoverDate = new Date(datepicker.viewDate.getTime()), day = parseInt($(this).html(), 10); // Set the day to the hovered day hoverDate.setDate(day); // If the previous month should be used, modify the month if ( $(this).hasClass('old') ) { // Check if we're trying to go back a month from Jan if ( hoverDate.getMonth() == 0 ) { hoverDate.setYear(hoverDate.getYear() - 1); hoverDate.setMonth(11); } else { hoverDate.setMonth(hoverDate.month - 1); } } else if ( $(this).hasClass('new') ) { // Check if we're trying to go forward a month from Dec if ( hoverDate.getMonth == 11 ) { hoverDate.setYear(hoverDate.getYear() + 1); hoverDate.setMonth(0); } else { hoverDate.setMonth(hoverDate.month + 1); } } console.log(hoverDate); });Примечание:
Date.getMonth()возвращает целое число в диапазоне 0..11 (0-Январь, 11-декабрь). Это важно помнить.
Попробуйте это, проверьте консоль для вывода, скрипка Ссылка https://jsfiddle.net/9n451jcp/2/
var dp = $('.input-daterange'); dp.bootstrapDP({ startDate: "+0d", defaultViewDate: "+0d", format: "dd-M-yyyy", maxViewMode: 3, autoclose: true, orientation: "bottom auto", disableTouchKeyboard: true, }).on("changeDate", function() { $("#ToDate").focus(); //popup up end date calendar var selectedFromDate = $('#FromDate').bootstrapDP("getDate"); var selectedToDate = $('#ToDate').bootstrapDP("getDate"); $("#from").val(dateFormat(selectedFromDate, 'yyyy-mm-dd')); $("#to").val(dateFormat(selectedToDate, 'yyyy-mm-dd')); }); $('body').on('mouseenter', '.bootstrapDP td.day', function() { if (!$(this).hasClass('disabled')) { console.log($(this).text()); } });Надеюсь, это поможет..:)
Понял! Живая демо-скрипка
Интересной частью этого кода является:
$('body').on('mouseenter', '.bootstrapDP td.day', function() { var x = $(this); // Save DOM object to variable. Preserve context. // Don't show anything for disabled days. Simply return. if(x.hasClass("disabled")) { return; } // Extract the date info. var theDate = x.text(); var theMonthYear = getMonthYear(x); // using helper func. var output = theDate + ' ' + theMonthYear; // Show in the UI. Can otherwise use the vars here. $("#hoverDate").html(output); });Пояснение:
Вы можете извлечь числовую дату из
$(".bootstrapDP td.day"), как показано в коде. Месяц и дата берутся из$(".bootstrapDP-switch"), но могут отличаться, если вы зависаете над датой из "последнего" или "следующего" месяца.Поэтому я также предоставил помощника
function getMonthYearв коде решения , который определит, находитесь ли вы в прошлом или следующем месяце, и вернется соответствующим образом. Другие месяцы могут быть извлечены из$(".bootstrapDP-months")в случае выбора одной из отображаемых дат, которая попадает в "следующий" или "последний" месяц.На данный момент я утверждаю, что зависание над отключенной датой не будет иметь никакого эффекта. Это можно изменить, удалив строку
if(x.hasClass("disabled")) { return; }Подтверждение
Это решение основано на предыдущем решении @mike tracker.
$(document).on('mouseenter','#FromDate td.day',function() { var FromDate = $(this).html(); }); $(document).on('mouseenter','#ToDate td.day',function() { var ToDate = $(this).html(); });
Comments