2009-12-23 21 views
33

Ho una funzione che esegue una query per ottenere alcuni dati in base a un determinato intervallo di date che viene selezionato utilizzando .datepicker(). Sto provando a impostare i datepicker che sono nei dati di risposta indietro all'intervallo di date che è stato selezionato prima dell'esecuzione della query..datepicker ('setdate') problemi, in jQuery

queryDate = '2009-11-01'; 
$('#datePicker').datepicker('setDate', queryDate); 

ha il risultato interessante dell'impostazione del datario alla data odierna! Non sarei così confuso se sputasse solo un errore. Perché lo imposta alla data odierna?

Come posso prendere la data che è stata formattata come "aaaa-mm-gg" e impostare il datapicker su di esso?

Penso che potrebbe essere meglio impostare semplicemente la casella di testo a cui è collegato il datapicker su "queryDate".

risposta

31

Si dovrebbe analizzare la stringa di data, dal momento che con il formato della data ISO8601 con il costruttore Date non è supportato cross-browserly ancora, (alcuni browser lo supportano dal momento che sarà parte dello standard EcmaScript 5):

var queryDate = '2009-11-01', 
    dateParts = queryDate.match(/(\d+)/g) 
    realDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]); 
            // months are 0-based! 

$('#datePicker').datepicker({ dateFormat: 'yy-mm-dd' }); // format to show 
$('#datePicker').datepicker('setDate', realDate); 

Controllare l'esempio precedente here.

+4

Hai perso un po ': '$ (' # datePicker '). Datepicker (' setDate ', realDate);' –

+1

Grazie !, risolto ... – CMS

+3

Non analizzare la data da soli. Questo è un approccio negativo. Meglio usare la funzione parseDate datepicker. Dai un'occhiata alla mia risposta. – jurka

6

provare a cambiare a:

queryDate = '2009-11-01'; 
$('#datePicker').datepicker({defaultDate: new Date (queryDate)}); 
10

come post di Scobal implica, il DatePicker è alla ricerca di un oggetto Date - non solo una stringa! Così, di modificare il codice di esempio per fare ciò che si vuole:

var queryDate = new Date('2009/11/01'); // Dashes won't work 
$('#datePicker').datepicker('setDate', queryDate); 
+0

funzionato come un fascino. E preferirei usare l'oggetto Date incorporato piuttosto che un parser fai-da-te come da soluzione CMS –

+3

Tuttavia, lo stato attuale dei documenti: La nuova data potrebbe essere un oggetto Date o una stringa nel formato data corrente. Si imposta il formato durante la creazione di datepicker con .datepicker ({dateFormat: 'aa-mm-gg'}); eppure questo non funziona - è un bug, un errore con la documentazione o qualcos'altro? –

1

Verificare che la data in cui si sta tentando di impostarla rientri nell'intervallo di date consentito se sono impostate le opzioni minDate o maxDate.

69

Quando si tenta di chiamare setDate è necessario fornire un oggetto Date javascript valido.

queryDate = '2009-11-01'; 

var parsedDate = $.datepicker.parseDate('yy-mm-dd', queryDate); 

$('#datePicker').datepicker('setDate', parsedDate); 

Questo vi permetterà di utilizzare diversi formati per la data query e la rappresentazione data stringa datepicker. Questo approccio è molto utile quando si crea un sito multilingue. Un'altra funzione utile è formatDate, che formatta l'oggetto data javascript in stringa.

$.datepicker.formatDate(format, date, settings); 
+12

+1 Molto meglio della risposta accettata. Peccato che SO non abbia un modo per indicare che è arrivata una risposta migliore (in questo caso anni più tardi) successiva alla risposta che è stata accettata. – Hollister

+0

@Hollister, puoi segnalare la domanda a un moderatore per dare un'occhiata, ovviamente spiegando che la risposta successiva è migliore. Penso che i moderatori possano cambiare l'accettazione della risposta. –

2
function calenderEdit(dob) { 
    var date= $('#'+dob).val(); 
    $("#dob").datepicker({ 
     changeMonth: true, 
     changeYear: true, yearRange: '1950:+10' 
    }).datepicker("setDate", date); 
} 
+0

Esattamente quello che cercava, signore –