Data una data, come trovo il lunedì più vicino in Rails?Rails: c'è via per ottenere l'oggetto Date che è il lunedì più vicino a oggi?
So di poter fare le cose come:
Date.tomorrow Date.today
C'è qualcosa di simile Date.nearest: lunedi?
Data una data, come trovo il lunedì più vicino in Rails?Rails: c'è via per ottenere l'oggetto Date che è il lunedì più vicino a oggi?
So di poter fare le cose come:
Date.tomorrow Date.today
C'è qualcosa di simile Date.nearest: lunedi?
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.
'.divmod (4)' restituisce una matrice. Potresti usare '.divmod (4) [1]' o '.modulo (4)' invece; D – PeterWong
@PeterWong grazie per averlo indicato. È stato corretto – sgriffinusa
Grazie! Ci scusiamo per il lungo ritardo nella risposta, le vacanze! :-) – Chanpory
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
Supponendo che si desidera entrambe le direzioni: Date.today.beginning_of_week + 7*(Date.today.wday/5)
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)
Questa risposta e l'uso di [questo] (https://stackoverflow.com/a/21199096/1612469) articolo, è stato l'approccio migliore per me – Aleks
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
avete bisogno di andare in entrambe le direzioni? cioè se è martedì, vai a ieri ma se è venerdì vai al lunedì successivo? – zsalzbank