【发布时间】:2022-01-19 08:48:15
【问题描述】:
给定任何日期,我使用此代码从该日期获取上个月的开始日期:
library(lubridate)
end_date <- '2021-10-30'
floor_date(as.Date(end_date) - months(1), 'month')
[1] "2021-09-01"
但我发现它返回NA,因为日期的格式是%Y-%m-31:
end_date <- '2021-10-31'
floor_date(as.Date(end_date) - months(1), 'month')
[1] NA
我们如何解释这个错误?谢谢。
【问题讨论】:
-
我猜是因为没有 9 月 31 日。试试
'2021-08-31',效果很好。 -
对不起,我不这么认为,如果你检查:wincalendar.com/Calendar/Date/October-31-2021
-
您提供的链接似乎没有回答我的问题,因为错误不是来自如何获得第一天,而是来自上个月@Limey
-
您的错误的原因是
as.Date(2021-10-31) - months(1)将返回2021-09-31但由于这一天不存在,它返回 NA。 -
不保证每月 31 日存在。但是每个月的第一天是。因此,颠倒操作顺序以确保您在每个阶段都有一个有效的日期:
lubridate::floor_date(as.Date(end_date), "month") - months(1),正如@Waldi 所建议的那样。