2017-06-16 62 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

好吧,我编辑它。只需要添加一点条件来检查它是否是星期天已经 –

相关问题