2013-05-06 16 views

Odpowiedz

6

to działa w Ruby:

require 'date' 

def last_wednesday(date) 
    date - (date.wday - 3) % 7 
end 

last_wednesday(Date.today) 
# => #<Date: 2013-05-01 ((2456414j,0s,0n),+0s,2299161j)> 

W Rails jest beginning_of_week:

Date.today.beginning_of_week(:wednesday) 
# => Wed, 01 May 2013 
+1

'starting_of_week' to naprawdę ciekawy/zwięzły sposób na rozwiązanie tego problemu. Świetny pomysł! – Shpigford

8
time = Time.now 
days_to_go_back = (time.wday + 4) % 7 
last_wed = days_to_go_back.days.ago 
+0

To ... to ... Brilliant! – MrYoshiji

0

całkiem prosta z Date:

require 'date' 
today = DateTime.now.to_date 
last_wednesday = today.downto(today - 6).select { |d| d.wednesday? } 

Można nawet uzyskać ostatniego tygodnia z wyboru takiego (tu bez obsługi błędów):

def last_weekday(weekday) 
    today = Time.now.to_date 
    today.downto(today-6).select do |d| 
    d.send((weekday.to_s + "?").to_sym) 
    end 
end 
2

Jeśli są w porządku z pomocą innego klejnot, polecam Chronic.

Dzięki niemu można uzyskać w ubiegłą środę, wykonując:

Chronic.parse('last Wednesday') 
2

Najprostszym sposobem (dla mnie) to:

require 'date' 
date = Date.today 
date -= 1 until date.wednesday? 
+0

Całkiem ładny strzał. –

Powiązane problemy