如何获得从下一个星期日结束的周
问题描述:
我知道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
。
+0
对不起,应该在问题中澄清这一点,但如果给定的日期是星期天,那么我期待着星期天的返回。 '2017-06-18'逗留'2017-06-18' –
+0
好吧,我编辑它。只需要添加一点条件来检查它是否是星期天已经 –
'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”' –