2012-06-21 3 views
6

У меня есть два datepickers календари, один для даты начала, а другой для даты окончания.jQuery UI datepicker: добавить 6 месяцев к другому datepicker

Я хочу, чтобы динамически установить значение defaultDate второго датпикера на шесть месяцев позже первого, когда выбрана первая дата.

Я знаю, как сообщить о Fisrt даты на второй DatePicker, но я не знаю, как добавить шесть месяцев до первого затем добавить его в качестве defaultdate второго DatePicker

Вот мой код:

$(".firstcal").datepicker({ 
    dateFormat: "dd/mm/yy", 
    onSelect: function (dateText, inst) { 
     var date = $.datepicker.parseDate('dd/mm/yy', dateText); 
     var $sec_date = $(".secondcal"); 
     $sec_date.datepicker("option", "defaultDate", date); 
    } 
}); 
$(".secondcal").datepicker({ 
    dateFormat: "dd/mm/yy" 
}); 

большое спасибо за вашу помощь

Edit:

в Datepicker, функция, чтобы добавить шесть месяцев до даты существует: это этикеток d "+ 6M". Я просто хочу добавить «+ 6M» к первой дате и отправить ее как дату по умолчанию во вторую.

ответ

7
  1. Разбираем выбранную строку даты в JavaScript объект даты.
  2. Использовать Date.getMonth() и Date.setMonth() изменить месяц. Последняя функция автоматически увеличивает/уменьшает год, если это необходимо.
  3. Используйте метод jQuery datepicker's setDate, чтобы изменить дату второго datepicker (установка defaultDate не даст желаемых результатов).
onSelect: function(dateText, instance) { 
    date = $.datepicker.parseDate(instance.settings.dateFormat, dateText, instance.settings); 
    date.setMonth(date.getMonth() + 6); 
    $(".secondcal").datepicker("setDate", date); 
} 

Demo here

+0

Спасибо, Салман! Отлично ! –

0

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

var beginsDate=$('#dlg_begins').datepicker('getDate'); 
    var monthMillisec=30*24*60*60*1000; 
    var maxDate=new Date(); 
    maxDate.setTime(beginsDate.getTime() + monthMillisec); 

    $('#dlg_expires').datepicker('option', 
    { 
     'maxDate':maxDate, 
     'minDate':beginsDate 
    }); 
+0

Благодаря Matt, Это помогает мне, но частично: из-за каждый месяц не имеет такое же количество дней, результат не так. Если я добавлю 15778463000 миллисекунд (ведьма - 182,62 дня), то первый из 30-х годов назначил 30 декабря, а не первый из января –

2

Чтобы добавить 6 месяцев до даты

var second_date = new Date(date); 
second_date.setMonth(second_date.getMonth()+6); //+6 is however many months 

затем обновить значение

$("#secondcal").val(second_date); //It is probably better to work with ID