2009-12-23 12 views
33

Tengo una función que ejecuta una consulta para obtener algunos datos basados ​​en un cierto rango de fechas que se selecciona mediante .datepicker(). Estoy tratando de establecer el datepicker que están en los datos de respuesta de nuevo en el rango de fechas que se seleccionó antes de que se ejecutara la consulta.. Issuepicker ('setdate') cuestiones, en jQuery

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

tiene el resultado interesante de establecer el datepicker a la fecha de hoy! No estaría tan confundido si solo escupiera un error. ¿Por qué lo establece en la fecha de hoy?

¿Cómo puedo tomar la fecha que está formateada como, 'aaaa-mm-dd' y configurar el datepicker a ella?

Creo que lo mejor sería simplemente establecer el cuadro de texto al que está vinculado el marcador de fecha con 'queryDate'.

Respuesta

31

Se debe analizar la cadena de fecha, ya que con el formato de fecha ISO8601 con el Date constructor no se admite cruzada browserly sin embargo, (algunos navegadores lo soportan ya que será parte de la norma 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); 

Comprobar el ejemplo anterior here.

+4

Se perdió un poco: '$ ('# datePicker'). Datepicker ('setDate', realDate);' –

+1

¡Gracias !, solucionado ... – CMS

+3

No analice la fecha por su cuenta. Este es un mal enfoque. Mejor uso datepicker parseDate función. Eche un vistazo a mi respuesta. – jurka

6

pruebe a cambiar a:

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

Como el post de Scobal indica, el selector de fechas está en busca de un objeto Date - no sólo una cadena! Por lo tanto, modificar el código de ejemplo para hacer lo que quiera:

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

funcionó de maravilla. Y preferiría usar el objeto Date incorporado que algunos analizadores DIY según la solución –

+3

de CMS. Sin embargo, los estados actuales de los documentos: La nueva fecha puede ser un objeto Date o una cadena en el formato de fecha actual. Establece el formato al crear el datepicker con .datepicker ({dateFormat: 'aa-mm-dd'}); y sin embargo, esto no funciona, ¿es esto un error, un error con la documentación o algo más? –

1

Compruebe que la fecha en la que intenta establecerlo se encuentra dentro del rango de fechas permitido si se configuran las opciones minDate o maxDate.

69

Cuando intente llamar a setDate debe proporcionar un objeto de fecha de javascript válido.

queryDate = '2009-11-01'; 

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

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

Esto le permitirá utilizar diferentes formatos para la fecha de consulta y representación de la fecha en la cadena de selector de fechas. Este enfoque es muy útil cuando crea un sitio multilingüe. Otra función útil es formatDate, que da formato al objeto javascript date a la cadena.

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

+1 Mucho mejor que la respuesta aceptada. Lástima que SO no tiene una manera de indicar que llegó una mejor respuesta (en este caso años después) después de la respuesta que fue aceptada. – Hollister

+0

@Hollister, puede marcar la pregunta para que un moderador la mire, por supuesto explicando que la respuesta posterior es mejor. Creo que los moderadores pueden cambiar la aceptación de la respuesta. –

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

Exactamente lo que está buscando, señor señor –

Cuestiones relacionadas