eternicode Datepicker и Bootstrap3 checkin checkout

Редактировать: есть решение в ответе.

Может ли какой-нибудь эксперт помочь мне с кодом javascript?

У меня есть eternicode Datepicker, работающий с bootstrap3 (он работает, когда щелкаешь, чтобы выбрать дату) https://github.com/eternicode/bootstrap-datepicker/tree/bs3

Но теперь у меня есть две даты, Checkin и Checkout, и я хочу: При выборе Checkout он отключает дни ‹= Checkin. При выборе регистрации, если это происходит после проверки, измените проверку на +1 день после выбранной регистрации.

У меня есть некоторый код html и javascript, но он работает не очень хорошо: когда я выбираю регистрацию, днем ​​проверки является сегодняшний день, и он должен быть выбран при регистрации + 1 день. Когда я выбираю проверку, он отключает только дни до текущего дня, работает только в том случае, если я выбираю день после дня регистрации.

Похоже, что это какая-то проблема с setValue проверки.

HTML-код (входные данные):

    <div class="form-group">
    <label for="DtChkIn">Data Checkin</label>
        <div class="input-group date" id="dp1">
        <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
        <input type="text" class="form-control input-sm" id="DtChkIn" placeholder="Data CheckIn" readonly="readonly">
        </div>
</div>
<div class="form-group">
    <label for="DtChkOut">Data Checkout</label>
        <div class="input-group date" id="dp2">
        <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
        <input type="text" class="form-control input-sm" id="DtChkOut" placeholder="Data CheckOut" readonly="readonly">
        </div>
</div>

И джаваскрипт:

var nowTemp = new Date();
var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);

var checkin = $('#dp1').datepicker({
    language: "pt",
    format: "dd/mm/yyyy",
    beforeShowDay: function (date) {
        return date.valueOf() < now.valueOf() ? false : '';
    }
}).on('changeDate', function (ev) {
    if (ev.date.valueOf() > checkout.date.valueOf()) {
        var newDate = new Date(ev.date);
        newDate.setDate(newDate.getDate() + 1);

        checkout.setValue(newDate);
    }

    checkin.hide();
    $('#DtChkOut').focus();
}).data('datepicker');

var checkout = $('#dp2').datepicker({
    language: "pt",
    format: "dd/mm/yyyy",
    beforeShowDay: function (date) {
        return date.valueOf() <= checkin.date.valueOf() ? false : '';
    }
}).on('changeDate', function (ev) {
    checkout.hide();
}).data('datepicker');

person Marcio Cardoso    schedule 08.11.2013    source источник
comment
Эй, Марсио, я наткнулся на твой вопрос и увидел, что ты сам нашел решение. Пожалуйста, добавьте свое решение в качестве ответа и примите его, чтобы люди сразу увидели, что на ваш вопрос есть рабочий ответ. Спасибо!   -  person snrlx    schedule 30.01.2014
comment
Решение перенесено в ответ. Готово! :)   -  person Marcio Cardoso    schedule 30.01.2014


Ответы (1)


РЕШЕНИЕ. Скрипт, работающий с веткой ebernicode datepicker bs3 (checkin checkout)

var nowTemp = new Date();
var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);

var checkin = $('#dp1').datepicker({

    beforeShowDay: function (date) {
        return date.valueOf() >= now.valueOf();
    }
}).on('changeDate', function (ev) {
    if (ev.date.valueOf() > checkout.date.valueOf()) {
        var newDate = new Date(ev.date)
        newDate.setDate(newDate.getDate() + 1);
        checkout.setValue(newDate);
        checkout.setDate(newDate);
        checkout.update();
    }
    checkin.hide();
    $('#dp2')[0].focus();
}).data('datepicker');
var checkout = $('#dp2').datepicker({
    beforeShowDay: function (date) {
        return date.valueOf() > checkin.date.valueOf();
    }
}).on('changeDate', function (ev) {
    checkout.hide();
}).data('datepicker');

Обратите внимание на строки, добавленные для обновления даты прибытия перед сравнением с датой оформления:

   checkout.setDate(newDate);
   checkout.update();
person Marcio Cardoso    schedule 30.01.2014