最好的紅寶石,但邏輯是不夠好......週數年,還挺
我需要考慮到本週是非標準一年的週數。所以,假設你定義一個星期爲星期六 - >星期五。那麼,給定一個日期,哪個星期的數字(1-52)是?
的strftime有%U:
> Time.now.strftime('%U')
> => "28"
...但是,這當然是假定標準週日 - >週六的一週。
最好的紅寶石,但邏輯是不夠好......週數年,還挺
我需要考慮到本週是非標準一年的週數。所以,假設你定義一個星期爲星期六 - >星期五。那麼,給定一個日期,哪個星期的數字(1-52)是?
的strftime有%U:
> Time.now.strftime('%U')
> => "28"
...但是,這當然是假定標準週日 - >週六的一週。
也許可以這樣做;
def week_dates(week_num)
year = Time.now.year
week_start = Date.commercial(year, week_num, 1)
week_end = Date.commercial(year, week_num, 7)
week_start.strftime("%m/%d/%y") + ' - ' + week_end.strftime(
"%m/%d/%y")
end
查找給定日期的週數。 – jsharpe
class Date
def sweek
date = self + 1
date.cweek
end
end
# Today is Sunday, 17 July
Date.today.cweek
#=> 28
Date.today.sweek
#=> 29
不錯,但是對於修補核心類的猴子來說+0,奇怪的是btw'Time.new。strftime('%W')!= Time.new.to_date.cweek' – akostadinov
@akostadinov:你現在可能已經很久以前了,但是爲了後代,'Time.new.strftime('%W')'返回一個String 'Time.new.to_date.cweek'返回一個整數,所以它們不會相等。 – ray
使用%W
而不是%U
,它使用星期一作爲一週的第一天。
Time.now.strftime('%W')
但它是零索引,而不是'Date.today.cweek' form @ fl00r的答案。 –
我們可以弄清楚如何考慮這個日曆片段從什麼用%U
(太陽一週開始)返回的週數的偏移:
August 2015 Su Mo Tu We Th Fr Sa 1 %U => 30 2 3 4 5 6 7 8 %U => 31 9 10 11 12 13 14 15 %U => 32
讓我們的方式,我們希望有一個Wed-星期二,縮寫爲格式%?
(所以我們不必輸入「星期三開始一週」)。
我們希望:
August 2015 We Th Fr Sa Su Mo Tu 1 2 3 4 %? => 30 5 6 7 8 9 10 11 %? => 31 12 13 14 15 %? => 32
通知我們如何薩留在兩個系統中相同的週數,而本週的所有其他天%?
被移動到前一週持平。
因此,我們可以這樣做:
startd = Date.new(2015, 8, 1)
# show whole month
pp (startd .. (startd >> 1)-1).map {|d|
origw = d.strftime('%U').to_i
# Adjust our new week number if not We-Sa:
neww = ([3, 4, 5, 6].include?(d.wday) ? origw : origw-1)
[d.to_s, origw, neww]
}
如果你想週六至週五一週,你可以減去1天是不是星期六:
d.wday == 6 ? origw : origw-1
注意,有一對夫婦邊緣的情況下,取決於你選擇你的一週(處理這些留給讀者的練習)。對於我們的週三,週二周:
%U
把1月1日在1,如果是星期天爲一週)。一週的幾天你重新調整,你會有更多的邊緣情況。週六到週五可能會遇到最多的問題,因爲您在7天內調整了6天。
也許使用這個標準,然後根據今天的星期幾來計算你自己的偏移... – Randy
星期日 - >星期六隻是美國標準。國際標準是星期一 - >星期日。 – sawa