我知道lubridate
有一個功能ceiling_date
,但它提供了從給定日期到下個星期六結束的周。我該如何改變它才能讓下週的星期結束呢?如何獲得從下一個星期日結束的周
> ceiling_date(as.Date('2017-06-16'), 'week')
[1] "2017-06-17 20:00:00 EDT"
我知道lubridate
有一個功能ceiling_date
,但它提供了從給定日期到下個星期六結束的周。我該如何改變它才能讓下週的星期結束呢?如何獲得從下一個星期日結束的周
> ceiling_date(as.Date('2017-06-16'), 'week')
[1] "2017-06-17 20:00:00 EDT"
我認爲這可能是與ceiling_date
錯誤所列的位置:https://github.com/tidyverse/lubridate/issues/479
一個解決辦法可能是搶年/周,然後輪至週日:
as.Date(paste0(year('2017-06-16'), week('2017-06-16') + ifelse(wday('2017-06-16')==1,0,1), 7), format = "%Y%U%u")
#[1] "2017-06-18"
從?strptime
:
%Y
是一年c entury(即2017)%U
是一年中周爲十進制%u
是1-7周的天(1日)因此,我們需要通過1
(因此+1
我們每週轉移)和那麼我們將這一天設置爲星期日7
。
對不起,應該在問題中澄清這一點,但如果給定的日期是星期天,那麼我期待着星期天的返回。 '2017-06-18'逗留'2017-06-18' –
好吧,我編輯它。只需要添加一點條件來檢查它是否是星期天已經 –
'ceiling_date(as.Date('2017-06-16'),'week')+ 60 * 60 * 24'? – Sotos
我認爲這可能實際上是'ceiling_date'的錯誤。請參閱https://github.com/tidyverse/lubridate/issues/479(Henrik在我的另一個答案中指出了這一點) –
當日期是星期天時,手動調整它會是一個問題:'ceiling_date(as.Date(' '),'week')+ 60 * 60 * 24 [1]「2017-06-25 20:00:00 EDT」' –