2016-01-24 15 views
9

Voglio ottenere la data del prossimo lunedì o giovedì (o oggi se è lunedì o giovedì). Come Moment.js opera entro i limiti di una Domenica - Sabato, sto avendo a lavorare il giorno corrente e calcolare il prossimo Lunedi o Giovedi sulla base di tale:Diventare prossimo lunedì o giovedì con moment.js

if (moment().format("dddd")=="Sunday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Monday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Tuesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Wednesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Thursday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Friday") { var nextDay = moment(.day(8); } 
if (moment().format("dddd")=="Saturday") { var nextDay = moment().day(8); } 

Questo funziona, ma sicuramente c'è una migliore modo!

+0

http: // StackOverflow .com/questions/22144940/get-next-week-start-and-end-using-jquery-and-moment-js –

+0

come stai usando ... o vuoi usarlo? E perché lunedì 1, ma martedì è +4? – charlietfl

+0

Ah, se oggi è lunedì o giovedì ottengono oggi se non ricevono il prossimo lunedì o giovedì. Modificherò la domanda –

risposta

24

First è necessario sapere dove ci si trova nella settimana: moment.day() o leggermente più prevedibile (nonostante le impostazioni internazionali) moment().isoWeekday().

Vuoi sapere se il giorno di oggi è più piccolo o più grande del giorno che desideri. Se è più grande, vuoi usare la prossima settimana. Se è più piccolo, puoi usare il lunedì o il giovedì di questa settimana.

const dayINeed = 4; // for Thursday 
if (moment().isoWeekday() <== dayINeed) { 
    return moment().isoWeekday(dayINeed); 
} else... 

poi si desidera una soluzione che vi darà "il lunedi della prossima settimana", indipendentemente da dove ci si trova nella settimana corrente. In poche parole, si desidera entrare nella prossima settimana, utilizzando moment().add(1, 'weeks'). Una volta che sarai nella prossima settimana, puoi selezionare il giorno desiderato, usando moment().day(1).

Insieme:

const dayINeed = 4; // for Thursday 

// if we haven't yet passed the day of the week that I need: 
if (moment().isoWeekday() <== dayINeed) { 
    // then just give me this week's instance of that day 
    return moment().isoWeekday(dayINeed); 
} else { 
    // otherwise, give me next week's instance of that day 
    return moment().add(1, 'weeks').isoWeekday(dayINeed); 
} 

Vedi https://stackoverflow.com/a/27305748/800457

5

moment().day() ti darà un numero riferito al giorno_di_settimana.

Cosa c'è di meglio: moment().day(1 + 7) e moment().day(4 + 7) ti daranno lunedì prossimo, giovedì prossimo rispettivamente.

guarda anche: http://momentjs.com/docs/#/get-set/day/

+1

Purtroppo, questo non è il caso. Se oggi è martedì 26, il momento(). Giorno (1) tornerà lunedì 25 - momento(). Giorno (8) restituirà lunedì prossimo. –

2

IMHO modo più elegante:

var setDays = [ 1, 1, 4, 4, 4, 8, 8 ], 
    nextDay = moment().day(setDays[moment().day()]); 
4

Il seguente può essere utilizzato per ottenere una data successiva nei giorni feriali dalle società (o qualsiasi data)

var weekDayToFind = moment().day('Monday').weekday(); //change to searched day name 

var searchDate = moment(); //now or change to any date 
while (searchDate.weekday() !== weekDayToFind){ 
    searchDate.add(1, 'day'); 
} 
0

Ecco per esempio Lunedi prossimo:

var chosenWeekday = 1 // Monday 

var nextChosenWeekday = chosenWeekday < moment().weekday() ? moment().weekday(chosenWeekday + 7) : moment().weekday(chosenWeekday) 
+0

Scusa ma non è vero. Il tuo primo esempio darà il lunedì della settimana corrente. Se è già martedì, ad esempio, ti darà il lunedì precedente. –

+0

Hai ragione lemme aggiusta che @ShannonPoole – softcode

+0

@ShannonPoole Fixato thx per indicare – softcode

2

ottenere il prossimo lunedi utilizzando momento

moment().startOf('isoWeek').add(1, 'week'); 
+0

Questo non dipende da che giorno è considerato l'inizio della settimana nel locale che viene utilizzato? – jorisw

+1

A partire dalla versione 2 @jorisw 'startOf ('settimana') utilizza il giorno di inizio settimana locale consapevole. – AshUK

+1

e' .startOf ('isoWeek') 'ISO 8601 stabilisce che i numeri dei giorni della settimana, da 1 a 7, iniziano con lunedì e termina con domenica – AshUK

0

Ecco una soluzione per trovare il prossimo Lunedi, o oggi se si tratta di Lunedi:

const dayOfWeek = moment().day('monday').hour(0).minute(0).second(0); 

const endOfToday = moment().hour(23).minute(59).second(59); 

if(dayOfWeek.isBefore(endOfToday)) { 
    dayOfWeek.add(1, 'weeks'); 
}