2009-10-16 18 views
12

¿Cómo puede uno devolver la próxima fecha fecha de un día de la semana determinado (podría ser un número 0-6 o nombres de domingo a sábado).Obtenga la siguiente fecha del día de la semana en JavaScript

ejemplo, si hoy, en Viernes 16-Oct-2009 pasé en:

  • Viernes, devolvería la fecha de hoy 16-Oct-2009
  • Sábado devuelve 17-Oct-2009
  • Jueves devuelve 22-Oct-2009
+5

Esto no es rent-a-coder, se supone que no debes pedirle a la gente que haga un trabajo por ti. Por favor reformula tu publicación en forma de pregunta. –

+0

Necesito un millón de dólares. Pero no voy a venir aquí para pedirlo. –

+0

@Andy E ¿Por qué no votó negativamente esta pregunta? Estoy harto y cansado de que los usuarios de esta comunidad descuiden el voto negativo solo porque pierden un punto. ¡Nunca hubiera venido aquí si estuviera en -1! –

Respuesta

22

Solo agregando 7 no resuelve el problema.

La siguiente función le dará el siguiente día de la semana.

function nextDay(x){ 
    var now = new Date();  
    now.setDate(now.getDate() + (x+(7-now.getDay())) % 7); 
    return now; 
} 
+2

Para los curiosos, así es como funciona esto: el código recibe el día actual del mes (1-31) y agrega la diferencia entre el día de la semana (0-6) y el día de la semana deseado. (0-6), luego usa mod para asegurarse de que el nuevo valor no sea más que 6. – Polyducks

3

Para ampliar user 190106 's answer, este código debe darle lo que quería:

function getNextDay(day, resetTime){ 
    var days = { 
    sunday: 0, monday: 1, tuesday: 2, 
    wednesday: 3, thursday: 4, friday: 5, saturday: 6 
    }; 

    var dayIndex = days[day.toLowerCase()]; 
    if (!dayIndex) { 
    throw new Error('"' + day + '" is not a valid input.'); 
    } 

    var returnDate = new Date(); 
    var returnDay = returnDate.getDay(); 
    if (dayIndex !== returnDay) { 
    returnDate.setDate(returnDate.getDate() + (dayIndex + (7 - returnDay)) % 7); 
    } 

    if (resetTime) { 
    returnDate.setHours(0); 
    returnDate.setMinutes(0); 
    returnDate.setSeconds(0); 
    returnDate.setMilliseconds(0); 
    } 
    return returnDate; 
} 

alert(getNextDay('thursday', true)); 
13

Aquí es una versión ligeramente modificada de la respuesta de Tim para hacer frente a la específica pregunta-- pasar en una fecha d, e, y un día deseado de la semana (Dow 0-6), devolver la fecha

function nextDay(d, dow){ 
    d.setDate(d.getDate() + (dow+(7-d.getDay())) % 7); 
    return d; 
} 
+2

Funciona como un encanto. Fiddle: https://jsfiddle.net/pomqt31x/3/ – Patito

+0

Para aquellos que necesitan obtener un día de la semana siguiente, o la semana siguiente: agregue un argumento de semana 'función nextWeekDay (d, dow, w)' y luego sume la semana al cálculo y elimine el módulo: 'returnDate.setDate (d.getDate() + (dow + ((w * 7) -d.getDay())));' – stackingjasoncooper

3

Aquí hay otra solución simple

//takes dayIndex from sunday(0) to saturday(6) 
 
function nextDate(dayIndex) { 
 
    var today = new Date(); 
 
    today.setDate(today.getDate() + (dayIndex - 1 - today.getDay() + 7) % 7 + 1); 
 
    return today; 
 
} 
 
document.write("Next Sunday is: "+nextDate(0).toLocaleString()+"<br/>"); 
 
document.write("Next Thursday is: "+nextDate(4).toLocaleString()+"<br/>"); 
 
document.write("Next Saturday is: "+nextDate(6).toLocaleString());

0

Y si usted no quiere hacer pasar a los números, pero entre semana-nombres (domingo - Sábado) para encontrar una fecha futura de un determinado día de la semana, entonces esto le ayuda así:

function getDateOfWeekday(refday){ 
 
    var days = { 
 
     monday: 1, 
 
     tuesday: 2, 
 
     wednesday: 3, 
 
     thursday: 4, 
 
     friday: 5, 
 
     saturday: 6, 
 
     sunday: 0 
 
    }; 
 
    if(!days.hasOwnProperty(refday))throw new Error(refday+" is not listed in "+JSON.stringify(days)); 
 
    var currDate = new Date(); 
 
    var currTimestamp = currDate.getTime(); 
 
    var triggerDay = days[refday]; 
 
    var dayMillDiff=0; 
 
    var dayInMill = 1000*60*60*24; 
 
    // add a day to dayMillDiff as long as the desired refday (sunday for instance) is not reached 
 
    while(currDate.getDay()!=triggerDay){ 
 
     dayMillDiff += dayInMill; 
 
     currDate = new Date(currDate.getTime()+dayInMill); 
 
    } 
 
    return new Date(currTimestamp + dayMillDiff); 
 
} 
 

 
var sunday = getDateOfWeekday("sunday"); 
 
document.write("Next Sunday is at: <strong>"+sunday.toLocaleString()+"</strong><br/>"); 
 

 
var thursday = getDateOfWeekday("thursday"); 
 
thursday.setHours(0,0,0,0); // set hours/minutes/seconds and millseconds to zero 
 
document.write("Next Thursday is at: <strong>"+thursday.toLocaleString()+"</strong> on midnight<br/>"); 
 

 
var tuesday = getDateOfWeekday("tuesday"); 
 
document.write("Next Tuesday is at: <strong>"+tuesday.toLocaleString()+"</strong><br/>");

Cuestiones relacionadas