Obtenga la próxima fecha del día de la semana en JavaScript

3 minutos de lectura

avatar de usuario
Ruslán

¿Cómo puede uno devolver el siguiente fecha de un día de la semana determinado (puede ser un número del 0 al 6 o los nombres de domingo a sábado).

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

  • Viernesdevolvería la fecha de hoy 16-oct-2009
  • sábado devoluciones 17-oct-2009
  • jueves devoluciones 22-oct-2009

  • @Josh Stodola: No voté en contra porque me gusta darle al usuario la oportunidad de solucionar el problema primero. He votado negativamente muchas preguntas/respuestas, 1 punto no es nada. Le pedí que reformulara la pregunta y, si lo hace, el voto negativo sería innecesario.

    – Andy E.

    16 de octubre de 2009 a las 16:35

  • Personalmente, prefiero las preguntas mal formuladas a las de los usuarios inciviles.

    – slikts

    16 de octubre de 2009 a las 16:41

  • @Andy, @Josh Las preguntas frecuentes establecen claramente: “Mientras su pregunta sea… de interés para al menos otro programador en algún lugar… es bienvenida aquí. Ninguna pregunta es demasiado trivial o demasiado ‘novata'”. Esta es la primera pregunta del que pregunta, déle un poco de holgura: nadie responde perfectamente en el primer intento.

    – brian peiris

    19 de octubre de 2009 a las 9:00

  • Hola @AndyE, “@slikts”, @”John Stodola”, @”brianpeiris”. Espero que estes bien. Han pasado 7,5 años) Finalmente logré editar la pregunta))

    – Ruslán

    26 de abril de 2017 a las 16:03


  • Este es uno de los sitios menos acogedores para los recién llegados. Prefiero luchar durante horas con un problema que publicar una pregunta aquí.

    – EL

    16 de marzo de 2019 a las 15:22

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());

  • La única respuesta que me ayudó. Hoy es domingo y solo esta respuesta muestra la fecha del próximo domingo, otras muestran la fecha de hoy.

    – Sergo Kupreishvili

    8 de marzo de 2020 a las 12:33

  • Para aquellos que necesitan obtener un día de la semana después del siguiente, o la semana siguiente: agregue un argumento de semana function nextWeekDay(d, dow, w) y luego agregue la semana al cálculo y elimine el módulo: returnDate.setDate(d.getDate() + (dow+((w * 7)-d.getDay())));

    – apilamientojasoncooper

    8 de noviembre de 2017 a las 16:04

avatar de usuario
azulharley

Y si no quiere pase números sino nombres de días de la semana (domingo sábado) para encontrar una fecha futura de un determinado día de la semana, entonces esto también te ayudará:

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/>");

avatar de usuario
este. __curious_geek

Una herramienta de navaja suiza para programación de fecha y hora javascript.

http://www.datejs.com/

avatar de usuario
Comunidad

Para ampliar la respuesta del usuario 190106, este código debería darte lo que querías:

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 !== undefined) {
    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));

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad