2009-10-16 13 views
12

Come si può restituire la successiva data di un determinato giorno della settimana (potrebbe essere un numero 0-6 o nomi Domenica-Sabato).Ottenere la data successiva dal giorno della settimana in JavaScript

esempio, se oggi, il Venerdì 16-ott-2009 passai in:

  • Venerdì, sarebbe tornare data odierna 16-Ott-2009
  • Sabato restituisce 17-Ott-2009
  • Giovedì restituisce 22-Ott-2009
+5

Questo non è un codice di affitto, non devi chiedere alle persone di fare del lavoro per te. Si prega di riformulare il tuo post sotto forma di una domanda. –

+0

Ho bisogno di un milione di dollari. Ma non vengo qui per chiederlo. –

+0

@Andy E Perché non hai votato in basso questa domanda? Sono malato e stanco degli utenti di questa comunità che trascurano il down-vote solo perché perdono un punto. Non sarei mai venuto qui se fosse a -1! –

risposta

22

L'aggiunta di 7 non risolve il problema.

La funzione seguente ti darà il giorno successivo della settimana.

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

Per i curiosi, questo è il modo in cui funziona: Il codice ottiene il giorno corrente del mese (1-31) e aggiunge la differenza tra il giorno della settimana di oggi (0-6) e il giorno della settimana desiderato (0-6), quindi usa mod per assicurarsi che il nuovo valore non sia superiore a 6. – Polyducks

3

Per espandere il user 190106 s' answer, questo codice dovrebbe darvi quello che volevi:

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

Ecco una versione leggermente modificata per la risposta di Tim per affrontare la specifica interrogo passare in una data d, e, e un giorno desiderato della settimana (Dow 0-6), restituire la data

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

Funziona come un incantesimo. Fiddle: https://jsfiddle.net/pomqt31x/3/ – Patito

+0

Per coloro che hanno bisogno di ottenere un giorno della settimana dopo il prossimo, o la settimana successiva: aggiungere un argomento settimana 'function nextWeekDay (d, dow, w)' quindi aggiungere la settimana al calcolo e rimuovere il modulo: 'returnDate.setDate (d.getDate() + (dow + ((w * 7) -d.getDay())));' – stackingjasoncooper

3

Ecco un altro semplice soluzione

//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

E se non si vuole fare passare i numeri, ma nei giorni feriali-nomi (domenica - sabato) per trovare una data futura di un determinato giorno della settimana, quindi questo ti aiuta così:

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

Problemi correlati