我正在嘗試根據給定年份的週數進行一些日期數學計算。例如:查找給定週數的日期
date = Date.today # Monday, March 5, 2012
puts date.cwyear # 2012
puts date.cweek # 10 (10th week of 2012)
現在我知道本週是什麼,我想弄清楚什麼下週前一週是。我需要將年份(2012年)和週數(10)轉換回日期對象,以便計算下一週/前一週的值。我怎樣才能做到這一點?
我正在嘗試根據給定年份的週數進行一些日期數學計算。例如:查找給定週數的日期
date = Date.today # Monday, March 5, 2012
puts date.cwyear # 2012
puts date.cweek # 10 (10th week of 2012)
現在我知道本週是什麼,我想弄清楚什麼下週前一週是。我需要將年份(2012年)和週數(10)轉換回日期對象,以便計算下一週/前一週的值。我怎樣才能做到這一點?
你想Date.commercial
:
require 'date'
now = Date.today #=> 2012-03-05
monday_next_week = Date.commercial(now.cwyear,now.cweek+1) #=> 2012-03-12
next_sunday_or_today = monday_next_week - 1 #=> 2012-03-11
需要注意的是周的星期一開始,所以如果你是在一個星期天,並要求在下週一 - 1個喲你會得到同一天。
還要注意的是,如果你不希望星期一你也可以指定方法的日數:
thursday_next_week = Date.commercial(now.cwyear,now.cweek+1,4) #=> 2012-03-15
對於Date
對象,每天計算非常簡單。如果你只是想從一個給定的Date
對象獲得一個/下一個星期使用以下命令:
date = Date.today
previous_week = (date - 7).cweek
next_week = (date + 7).cweek
+1永遠不要理解那些ActiveSupport cheapo的。 – steenslag 2012-03-05 22:44:55
看起來很有希望。現在,我將如何從給定的周和年(即不是本週)初始化新的日期對象? – Andrew 2012-03-05 22:49:35
@steenslag這只是你經常習慣的東西(特別是如果你的Ruby(Date)的大部分工作恰好在Rails中)。與習慣於在Ruby中注入'然後轉到Java並且您必須自己編寫它 - 這不過是另一個通用庫。我都是在依賴之前使用Ruby核心,但如果你已經擁有ActiveSupport,爲什麼不使用它呢? – 2012-03-05 23:16:47
在的ActiveSupport你有幫手Fixnum
轉換爲時間http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Numeric/Time.html使用:
date = Date.today
week_ago = date - 1.week
next_week = date + 1.week
看起來很有希望。現在,我將如何從給定的周和年(即不是本週)初始化新的日期對象? – Andrew 2012-03-05 22:50:00
假設你的意思是「在今年給定的週數」,你可以做以下:
2.weeks.since(Time.gm(Time.now.year)) =>週五年01月15 00:00:00 UTC 2010 替代(WEEK_NUMBER - 1),用於在上述的1,你會在所需的一週內得到一個日期。
我已經創造了一些方法來獲取給定日期 這樣的週數:
def self.get_week(date)
year = date.year
first_monday_of_the_year = self.get_first_monday_of_the_year(year)
# The first days of January may belong to the previous year!
if date < first_monday_of_the_year
year -= 1
first_monday_of_the_year = self.get_first_monday_of_the_year(year)
end
day_difference = date - first_monday_of_the_year
week = (day_difference/7).to_i + 1
week
end
def self.get_monday_of_year_week(year, week)
d = self.get_first_monday_of_the_year(year)
d + ((week - 1) * 7).days
end
def self.get_first_monday_of_the_year(year)
d = Date.new(year, 1, 7) # 7 Jan is always in the first week
self.get_monday_of_week(d)
end
def self.get_monday_of_week(date)
wday = (date.wday + 6) % 7
date - wday.days
end
這是Rails中/你能請使用ActiveSupport?它爲這樣的事情提供了一些不錯的日期助手。另外,「下一個星期」和「前一個星期」你是指在「日期」或這些星期開始之前和之後的七天? – 2012-03-05 22:22:52
這是一個Sinatra應用程序,但是如果ActiveSupport提供了可以執行此操作的功能,並且可以將它與Sinatra應用程序一起使用,那麼我願意使用它。 – Andrew 2012-03-05 22:24:51