2010-12-23 7 views

risposta

20

Il metodo commercial sull'oggetto Date consente di eseguire questa operazione. Questo esempio ti prenderà il prossimo lunedì.

Date.commercial(Date.today.year, 1+Date.today.cweek, 1) 

Se avete bisogno della successiva o precedente Lunedi, a seconda di quale è più vicino, si può fare:

Date.commercial(Date.today.year, Date.today.cwday.modulo(4)+Date.today.cweek, 1) 

Non posso eseguire questo momento, quindi perdonatemi se ci sono errori di sintassi.

+0

'.divmod (4)' restituisce una matrice. Potresti usare '.divmod (4) [1]' o '.modulo (4)' invece; D – PeterWong

+0

@PeterWong grazie per averlo indicato. È stato corretto – sgriffinusa

+0

Grazie! Ci scusiamo per il lungo ritardo nella risposta, le vacanze! :-) – Chanpory

0

testato, quindi potrebbe essere necessario perfezionare, ma qui si va:

def Date.nearest_monday 
    today = Date.today 
    wday = today.wday 
    if wday > 4 # over the half of the week 
    today + (7 - wday) # next monday 
    else 
    today - (1 + wday) # previous monday 
    end 
end 
5

Supponendo che si desidera entrambe le direzioni: Date.today.beginning_of_week + 7*(Date.today.wday/5)

8

E 'un po' difficile, ma non così difficile da calcolare.

Utilizzare ActiveSupport::DateAndTimeCalculations#end_of_week per calcolare la fine di una settimana, questo metodo accetta un parametro start_day utilizzato per indicare il giorno di inizio della settimana (è :monday per impostazione predefinita). Hanno persino implementato il metodo sunday.

Il trucco è il seguente: se si desidera calcolare il lunedì più vicino, è possibile calcolarlo come una fine settimana che inizia il martedì (Tue => 1 ° giorno, mercoledì => 2 ° giorno, ..., lun => 7 ° giorno che è anche la fine della settimana).

Quindi, tutto quello che dovete fare è:

# it will return current date if today is Monday and nearest Monday otherwise 
Date.today.end_of_week(:tuesday) 
+0

Questa risposta e l'uso di [questo] (https://stackoverflow.com/a/21199096/1612469) articolo, è stato l'approccio migliore per me – Aleks

3

So che questo è un vecchio thread, ma è sempre bello per mantenerle aggiornate per i cercatori futuri.

Supponiamo che oggi si dica venerdì 19 agosto. Tutto quello che faccio per ottenere il mio più vicino Lunedi è questo:

monday = Date.today.monday 

Poi da lì si può tornare indietro di una settimana o indietro in una settimana come questa:

last_monday = monday.last_week 
next_monday = monday.next_week 
Problemi correlati