jQuery datepicker, добавьте определенное количество дней после выбора даты


Как только пользователь выберет дату в окне выбора даты, я хочу добавить 41 день.

<script language="javascript">
$(document).ready(function() { 

$("#startdate").datepicker({    dateFormat: 'd/m/y'});

    $('#startdate').datepicker({
        onSelect: function(dateStr) {
            var nights = parseInt($('#numofdays').val());
            var depart = $.datepicker.parseDate('d/m/y', dateStr);
            depart.setDate(depart.getDate('d/m/y') + nights);
            $('#calc').val(depart);
         }
    });




});
</script> 


Start: <input type="text" id="startdate" class="datepicker"><br />
<input type="hidden" id="numofdays" value="41"><br />
Calc: <input type="text" id="calc">
Author: Matt, 2011-09-14

4 answers

Возможно, вам просто потребуется объединить параметры в одной и той же функции инициализации:

$("#startdate").datepicker({
    dateFormat: 'd/m/y',
    onSelect: function(dateStr, inst) {
        var nights = parseInt($('#numofdays').val());
        var depart = $.datepicker.parseDate('d/m/y', dateStr);
        depart.setDate(depart.getDate('d/m/y') + nights);
        $('#calc').val(depart.toLocaleDateString());
    }
});

Смотрите это в действии: http://jsfiddle.net/william/L9Szd/.

 1
Author: William Niu, 2011-09-14 23:09:08

$('#startdate').datepicker('getDate') вернет объект даты

d = $('#startdate').datepicker('getDate');
d.setDate(d.getDate()+nights); // add int nights to int date
alert(d);

Добавление d.getDate() и nights приведет к скачку времени вперед. Так что, если 16.09.2011 + 41 день, вы получите 25.10.2011

 1
Author: John Giotta, 2011-09-14 15:38:45

Может показаться странным, если пользователь выберет дату, а затем в поле будет указана дата, которая наступит через 41 день, а не та, которую я выбрал. почему бы не сделать это дополнение на стороне сервера с помощью PHP?

$date_string = date('Y-m-d', strtotime('+41 days', strtotime($_POST['date_input'])));
 1
Author: dqhendricks, 2011-09-14 16:48:49

Это единственный простой способ, который я нашел для этого:

Чтобы установить дату на 41 день раньше выбранной даты:

1. Извлеките выбранную дату из поля выбора даты

var newdate = new Date($("#datepicker_date_field_1").datepicker("getDate"));

2. Увеличьте дату, полученную сверху

newdate.setDate(newdate.getDate() + 41);

3. Назначьте вновь сформированную дату другому (или тому же) полю выбора даты

$("#datepicker_date_field_2").datepicker("setDate",newdate);    
 0
Author: Vladimir Despotovic, 2015-06-12 14:17:07