1月1日是铁路上一年的最后一周

时间:2011-12-12 14:31:44

标签: ruby-on-rails date

我有一个方法可以返回一个月第一周的第一天,用于制作一个小日历:

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?

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用Date.new(year, month).beginning_of_month而不是编写执行相同操作的函数。查看更多here 作为一个例子

 Date.new(2011, 1).beginning_of_month
 => Sat, 01 Jan 2011

修改:List of all the functions to do calculations on Date

答案 1 :(得分:2)

我认为这是因为商业周始终是从周日到周六的一段时间,因此1月1日 2011 上一个商业周的一部分2010年。

1月1日, 2011 在周六下跌。

1月2日, 2011 是2011年的第一个星期日,因此2011年是商业周刊#1。

当您在商业(商业)时间和民用(日历)时间之间进行转换时,您偶尔会遇到这些奇怪的重叠。它们基本上是两个独立的日历,这就是民用和商用转换的原因。商业时间对于涉及会计事务的计算特别有用,例如会计年度结束(而不是日历年度结束)等。