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'));
});
703   4  

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

    Ничего не найдено.