Estoy tratando de crear un script simple que me brinde la próxima fecha de reciclaje basada en un programa bisemanal que comienza el miércoles 6 de julio de 2011. Así que he creado esta sencilla función ... .Simple javascript date math ... not really
function getNextDate(startDate) {
if (today <= startDate) {
return startDate;
}
// calculate the day since the start date.
var totalDays = Math.ceil((today.getTime()-startDate.getTime())/(one_day));
// check to see if this day falls on a recycle day
var bumpDays = totalDays%14; // mod 14 -- pickup up every 14 days...
// pickup is today
if (bumpDays == 0) {
return today;
}
// return the closest day which is in 14 days, less the # of days since the last
// pick up..
var ms = today.getTime() + ((14- bumpDays) * one_day);
return new Date(ms);
}
y puede llamar así ...
var today=new Date();
var one_day=1000*60*60*24; // one day in milliseconds
var nextDate = getNextDate(new Date(2011,06,06));
hasta ahora tan bueno ... pero cuando me proyecto "hoy" a 10/27/2011, consigo Martes 11/8/2011 como la próxima fecha en lugar de miércoles 09/11/2011 ... De hecho, todos los días a partir de ahora hasta el 26/10/2011 proyecta la recogida correcta ... y cada fecha desde el 10/27/2011 hasta el 2/28/2012 proyecta el martes y no el miércoles. Y luego, cada fecha a partir del 2/29/2012 (año bisiesto) hasta el 10/24/2012 (hmmm octubre otra vez) proyecta el miércoles correctamente. ¿Qué me estoy perdiendo? Cualquier ayuda sería muy apreciada ..
V
¿No debería ceil be floor? Porque es el uso 2011-06-06 1: 00u totalDays será 1, y la próxima recolección será en 13 no 14 días, por lo que un martes. – Gerben
Parece extraño. Estoy obteniendo la fecha correcta con 'one_day = 1000 * 60 * 60 * 24; hoy = nueva Fecha (2011,8,27); nextDate = getNextDate (new Date (2011,6,6)); ', y nextDate is' Wed Sep 28 2011 00:00:00 GMT + ', que es correcto ¿no? Probado en FF4. – Raze
startDate siempre es nuevo Date (2011,06,06) - por lo que no debería moverse – user799301