Codice ruby per ottenere la data del prossimo lunedì (o qualsiasi giorno della settimana)

Dato un input di, per esempio,

day = 'Monday' 

come posso calcolare la data del day ?

 def date_of_next(day) ... end 

 require 'date' def date_of_next(day) date = Date.parse(day) delta = date > Date.today ? 0 : 7 date + delta end Date.today #=># date_of_next "Monday" #=># date_of_next "Sunday" #=># 

So che questo è un vecchio post, ma ho trovato un paio di metodi per ottenere rapidamente il giorno precedente e quello successivo della settimana.

 # date is a Date object and day_of_week is 0 to 6 for Sunday to Saturday require 'Date' def get_next_day(date, day_of_week) date + ((day_of_week - date.wday) % 7) end def get_previous_day(date, day_of_week) date - ((date.wday - day_of_week) % 7) end puts today = Date.today # 2015-02-24 puts next_friday = get_next_day(today, 5) # 2015-02-27 puts last_friday = get_previous_day(today, 5) # 2015-02-20 

Per cose del genere mi affido alla biblioteca cronica .

Il codice Ruby sarebbe:

 def date_of_next(day) Chronic.parse("next #{day}") end 

Se utilizzi i binari puoi utilizzare Date.today.sunday per domenica o Date.today.monday per lunedì. E poi Date.today.sunday - 1.day for Saturday ecc.

Per chiunque come me che è venuto qui cercando una soluzione in Rails per questo problema, a partire da Rails 5.2 c’è un metodo molto più semplice per farlo.

Per chiunque (come il poster originale) non specificamente utilizzando Rails, questa funzionalità è disponibile nella gem ActiveSupport .

Per trovare il prossimo giorno di una settimana, possiamo semplicemente scrivere qualcosa come Date.today.next_occurring(:friday) .

Vedi la documentazione per maggiori dettagli.