2011-12-12 85 views
1

我有一個返回每月第一週的第一天,用於製作小日曆的方法:1月1日是前一年的最後一週在軌

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

1月1日並不總是處於一年中的第一週。最初的一週由第一週的下降時間定義,但是當該年的第一週開始時。根據定義,第一名將會在前一年中下降到第六位。因爲那麼12月的後一週將會在第一週之後被定義爲您所期望的。 – ThePower

+0

你用什麼標準來說1月1日總是第1周?如果「1月1日星期五」是第1周,那麼「1月4日星期一」是星期幾?儘管有一個週末,它還是第一週嗎? – Gareth

+0

@Gareth這是一個類似日曆的視圖,我應該看到的第一週是1月1日的那一天,無論它是哪一天。 OMG! – grilix

回答

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

+0

讓我嘗試一下。 – grilix

+0

begining_of_month不是我所需要的,但beginning_of_week是。感謝您向我展示燈光! – grilix

2

我相信這是因爲商業一週始終是從星期日到星期六運行了一段時間,因此1月1日,是部分最後商業 2010年一週。

1月1日,2011年下週六。

1月2日,是2011年的第一個星期日,並於2011年

當你的商業(企業)之間的時間轉換,因此商業周#1,和民間(日曆)的時候,你是偶爾會遇到這些奇怪的重疊。它們基本上是兩個單獨的日曆,這就是爲什麼有民事和商業轉換。商業時間對涉及會計事務的計算特別有用,如會計年度結束時(而不是日曆年結束時)等。

相關問題