2017-06-16 100 views
3

我知道lubridate有一個功能ceiling_date,但它提供了從給定日期到下個星期六結束的周。我該如何改變它才能讓下週的星期結束呢?如何獲得從下一個星期日結束的周

> ceiling_date(as.Date('2017-06-16'), 'week') 
[1] "2017-06-17 20:00:00 EDT" 
+1

'ceiling_date(as.Date('2017-06-16'),'week')+ 60 * 60 * 24'? – Sotos

+0

我認爲這可能實際上是'ceiling_date'的錯誤。請參閱https://github.com/tidyverse/lubridate/issues/479(Henrik在我的另一個答案中指出了這一點) –

+0

當日期是星期天時,手動調整它會是一個問題:'ceiling_date(as.Date(' '),'week')+ 60 * 60 * 24 [1]「2017-06-25 20:00:00 EDT」' –

回答

0

我認爲這可能是與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

+0

對不起,應該在問題中澄清這一點,但如果給定的日期是星期天,那麼我期待着星期天的返回。 '2017-06-18'逗留'2017-06-18' –

+0

好吧,我編輯它。只需要添加一點條件來檢查它是否是星期天已經 –

相關問題