57 Stimmen

Ruby-Code, um das Datum des nächsten Montags (oder eines beliebigen Wochentags) zu ermitteln

Bei einer Eingabe von z.B.,

day = 'Monday'

wie kann ich das Datum der nächsten day ?

def date_of_next(day)
  ...
end

106voto

fl00r Punkte 81243
require 'date'

def date_of_next(day)
  date  = Date.parse(day)
  delta = date > Date.today ? 0 : 7
  date + delta
end

Date.today
#=>#<Date: 2011-10-28 (4911725/2,0,2299161)>
date_of_next "Monday"
#=>#<Date: 2011-10-31 (4911731/2,0,2299161)>
date_of_next "Sunday"
#=>#<Date: 2011-10-30 (4911729/2,0,2299161)>

52voto

s_dolan Punkte 1106

Für alle, die wie ich hierher gekommen sind, um nach einer Lösung für dieses Problem in Rails zu suchen, gibt es ab Rails 5.2 eine viel einfachere Methode, dies zu tun.

Für alle, die (wie der ursprüngliche Poster) nicht speziell Rails verwenden, ist diese Funktionalität in der ActiveSupport gem.

Um den nächsten Tag einer Woche zu finden, können wir einfach etwas schreiben wie Date.today.next_occurring(:friday) .

Siehe die Dokumentation für weitere Einzelheiten.

24voto

Devin Brown Punkte 1076

Ich weiß, dass dies ein alter Beitrag ist, aber ich habe mir ein paar Methoden ausgedacht, um schnell den vorherigen und den nächsten Tag der Woche zu ermitteln.

# 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

18voto

panteo Punkte 710

14voto

Dave Newton Punkte 156303

Für solche Dinge verlasse ich mich auf die chronisch Bibliothek.

Der Ruby-Code würde lauten:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X