- 月の最終日を調べて,最終日曜日を調べて 7 で割る
- 1 で足したり引いたりきもちわる
- (31..28) ってできないのか. reverse した.
require 'date'
now = Date.today
y = now.year
m = now.month
last_jd = (28..31).map {|d| Date.valid_date?(y,m,d)}.reverse.detect{|d| d}
last = Date.jd(last_jd)
puts (last.day - last.wday - 1) / 7 + 1
- がんばって書いた.なんとかコンパイルできた.
- head filter っぽいのないのかな
import Time
nDays n = TimeDiff { tdYear = 0,
tdMonth = 0,
tdDay = n,
tdHour = 0,
tdMin = 0,
tdSec = 0,
tdPicosec = 0
}
isSameMonth c0 c1 = (f c0) == (f c1)
where f = ctMonth.toUTCTime
lastDay c = head $ filter (isSameMonth c) $ [(nDays (d - day)) `addToClockTime` c| d <- [31,30..28]]
where day = ctDay.toUTCTime c
lastSunday c = head $ filter isSunday $ [(nDays (-w)) `addToClockTime` (lastDay c) | w <- [0..6]]
where isSunday c' = (ctWDay.toUTCTime) c' == Sunday
countSunday c = (d - 1) `div` 7 + 1
where d = ctDay.toUTCTime $ lastSunday c
main = do {
c <- getClockTime;
print $ countSunday c
}