我有一个方法可以返回一个月第一周的第一天,用于制作一个小日历:
def month_first_week_day(month, year)
start = DateTime.civil(year, month, 1)
start_date = DateTime.commercial(year, cweek, 1)
end
但我有这个问题:
Date.civil(2011, 1, 1).cweek # => 52
我希望它返回1,而不是52.我在java中发现了同样的问题:Why does the en_GB locale think the 1st of January is the 52nd week of the year?。
有什么建议吗?
答案 0 :(得分:2)
您可以使用Date.new(year, month).beginning_of_month
而不是编写执行相同操作的函数。查看更多here
作为一个例子
Date.new(2011, 1).beginning_of_month
=> Sat, 01 Jan 2011
答案 1 :(得分:2)
我认为这是因为商业周始终是从周日到周六的一段时间,因此1月1日 2011 是上一个商业周的一部分2010年。
1月1日, 2011 在周六下跌。
1月2日, 2011 是2011年的第一个星期日,因此2011年是商业周刊#1。
当您在商业(商业)时间和民用(日历)时间之间进行转换时,您偶尔会遇到这些奇怪的重叠。它们基本上是两个独立的日历,这就是民用和商用转换的原因。商业时间对于涉及会计事务的计算特别有用,例如会计年度结束(而不是日历年度结束)等。