【问题标题】:January 1st is the last week of previous year in rails1 月 1 日是上一年在 Rails 中的最后一周
【发布时间】:2012-01-18 12:56:15
【问题描述】:

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

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?

有什么建议吗?

【问题讨论】:

  • 1 月 1 日并不总是属于一年中的第一周。第一周定义为第一周的时间,但该年的第一周开始的时间。根据定义,第 1 次将在 7 次中有 6 次进入上一年。因为这样的话,12 月的后端周将低于第 1 周,如您所期望的那样。
  • 你用什么标准说 1 月 1 日总是第 1 周?如果 Friday Jan 1st 是第 1 周,那么 Monday Jan 4th 是哪一周?尽管中间有一个周末,但它仍然是第 1 周吗?
  • @Gareth 这是一个类似日历的视图,我应该看到的第一周是有 1 月 1 日的那一周,不管是哪一天。

标签: ruby-on-rails date


【解决方案1】:

您可以使用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

【讨论】:

  • begining_of_month 不是我需要的,但 begin_of_week 是。谢谢你让我看到光!
【解决方案2】:

我认为这是因为广告周始终是从星期日到星期六的一段时间,因此 2011 年 1 月 1 日最后一个广告周的一部分2010 年。

2011 年 1 月 1 日是星期六。

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

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

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多