2012-06-21 17 views
6

Ho due calendari di date, una per una data di inizio e un'altra per una data di fine.jQuery UI datepicker: aggiungi 6 mesi a un altro datepicker

Quello che voglio è impostare dinamicamente la data predefinita del secondo datepicker per essere sei mesi dopo la prima, quando viene selezionata la prima data.

so come riportare la data di fisrt al secondo DatePicker, ma non so come aggiungere sei mesi per il primo poi inserirlo come defaultdate del secondo datepicker

Ecco il mio codice:

$(".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" 
}); 

Grazie mille per il vostro aiuto

Edit:

Nel datePicker, la funzione per aggiungere sei mesi a una data esiste: è labele d "+ 6M". Voglio solo aggiungere "+ 6M" alla prima data e inviarla come data predefinita al secondo.

risposta

7
  1. analizzare la stringa data selezionata in un JavaScript data oggetto.
  2. Utilizzare Date.getMonth() e Date.setMonth() per modificare il mese. Quest'ultima funzione aumenta/diminuisce automaticamente l'anno se necessario.
  3. Utilizzare il metodo setDate di jQuery DatePicker per modificare la data del secondo DatePicker (l'impostazione di defaultDate non fornisce i risultati desiderati).
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

Grazie Salman A! Perfetto! –

0

Ecco il codice che uso per impostare la data massima di una seconda finestra di dialogo con un mese di ritardo rispetto alla prima. Quindi, si sarebbe solo impostare la data predefinita invece

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

Grazie Matt, mi aiuta, ma in parte: a causa di ogni mese non ha la stessa quantità di giorni, il risultato è sbagliato. Se aggiungo 15778463000 milliseilles (la strega è di 182,62 giorni), il primo di luglio è fissato il 30 dicembre anziché il primo di gennaio –

2

Per aggiungere 6 mesi a una data

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

quindi aggiornare il valore

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