2010-03-20 17 views
7

Uso el jQuery datepicker. En mi cuadro de texto "EndDate" me gustaría utilizar la fecha seleccionada en el cuadro de texto "StartDate" + 1. ¿Cómo hago esto?jQuery datepicker variable minDate

Intenté esto pero no funcionó. En mi código de fecha de inicio que tenía ...

  test = $(this).datepicker('getDate'); 
      testm = new Date(test.getTime()); 
      testm.setDate(testm.getDate() + 1); 

Luego, en mi código de la fecha final tuve ...

minDate: testm, 

pero la fecha de finalización aun así todos los días en el mes disponible.


Editar. Tengo curiosidad de por qué esto no funciona. En mi fecha de inicio selector de fechas tengo este ..

onSelect: function (dateText, inst) { 
    test = dateText 
} 

Por qué no puedo bajar a mi fecha de finalización selector de fechas y decir: minDate: test?


Editar. Todavía no funciona

$(".dateStartDatePickerBox").datepicker({ 
     minDate:'-0d', 
     onSelect: function(dateText, inst) 
     { 
      test = $(this).datepicker('getDate'); 
      testm = new Date(test.getTime()); 
      testm.setDate(testm.getDate() + 1); 

      $("#dateEndDatePickerBox").datepicker("option", "minDate", testm); 
     } 
    }); 

    $(".dateEndDatePickerBox").datepicker({ 
     onSelect: function() 
     { 

     } 
    }); 

Respuesta

21

Tendrá que ajustar la fecha min dinámicamente en el evento de cambio de la fecha de inicio.

Algo así como:

$("#startDate").change(function() { 
    test = $(this).datepicker('getDate'); 
    testm = new Date(test.getTime()); 
    testm.setDate(testm.getDate() + 1); 

    $("#endDate").datepicker("option", "minDate", testm); 
}); 

respuesta a la edición:

No se puede hacer lo siguiente:

var test; 
$("#myinput").datepicker({ 
    onSelect: function() { test = $(this).datepicker("getdate"); } 
}); 
$("#myotherinput").datepicker({ 
    minDate: test 
}); 

prueba no está inicializado en el momento en que MinDate se encuentra en myotherinput. El proceso de configuración de minDate sin duda requiere la manipulación DOM que datepicker administra en la inicialización o cuando se llama "opción". Simplemente cambiando la variable que se usó para la inicialización no afecta el datepicker ya inicializado.

+0

Joel, lo intenté. Pero después de escoger decir, 3/23/2010 en mi fecha de inicio. Las opciones de fecha de finalización para este mes todavía estaban disponibles. El objetivo aquí es tener, en este ejemplo, ellos comienzan el 24/3/2010. – d3020

+1

Este método está funcionando aquí: http://jsbin.com/uvehu/edit. Proporcione más contexto y código si aún no funciona para usted. – Joel

+0

Joel, puedo ver que el ejemplo funciona. Editaré mi publicación original para mostrar el código que tengo. Gracias por la ayuda. – d3020

0

¿Estás hablando de establecer una fecha de selección máxima?

StartDate = new Date("March 20, 2010"); 
EndDate = new Date("March 21, 2010"); 

$("#datepicker").datepicker({ minDate: StartDate, maxDate: EndDate, defaultDate: StartDate }); 

¿Nota el maxDate? Eso no le permitirá seleccionar los días pasados ​​...

+0

Justin, eso está cerca. Déjame explicarte un poco más. En su ejemplo StartDate ... necesito que esa sea la fecha seleccionada desde mi calendario de fecha de inicio. Luego, para el EndDate, tengo que decir que, sea cual sea la fecha en que fue seleccionado + 1. – d3020

0

La API documentation para el selector de fechas parece decir que debe tener un objeto Date, pero he tenido este problema exacto en el pasado y esto es cómo lo resolví

Pase minDateoffset, en lugar de una fecha. Necesitará una función para tomar su fecha de inicio, agregarle una y luego obtener la compensación a partir de hoy. Lo que podría tener una función como:

function offsetFromToday(someDate) { 
    // clear time offset because we only want to take date into account 
    someDate.setHours(0); 
    someDate.setMinutes(0); 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24; 

    // Convert both dates to milliseconds 
    someDate = someDate.getTime(); 
    var today = new Date().getTime(); 

    // Calculate the difference in milliseconds 
    var difference = Math.abs(someDate - today); 

    // Convert back to days and return 
    return Math.floor((difference/ONE_DAY) + 1); 
} 

por lo que sólo tiene que conseguir la fecha de inicio de un día por delante: StartDate.setDate(StartDate.getDate() + 1) o similares, y luego pasarlo a esta función para obtener una compensación, a continuación, dar que a minDate.

+0

thenduks, no estoy del todo claro de dónde sería llamado esto con lo que tengo actualmente. ¿Puedes mirar mi última edición y decirme dónde tendría esto? – d3020

+0

por cierto - en mi última edición, creo, eso funcionará pero tengo esta línea - $ ("# dateEndDatePickerBox"). Datepicker ("opción", "minDate", testm); en el lugar equivocado y la fecha de finalización datepicker no lo está viendo. No estoy seguro de implementar esa línea en el datepicker de fecha de finalización. – d3020