r语言 - 如何在润滑油中表示当月的第15天



我想创建一个if-else语句,如果当前日期在每个月的15号之后,它将打印今天的日期,否则如果当前日期在每个月的15号之前,它应该打印上个月的日期。我不知道如何在测试表达式的右侧表示当前月的15号,有什么想法吗?

library(lubridate)
ifelse(Sys.Date() >  15TH_OF_THE_MONTH, Sys.Date(), Sys.Date() - months(1))

我们可以这样做

as.numeric(format(Sys.Date(), "%d")) > 15
[1] TRUE
library(lubridate)
ifelse(day(Sys.Date()) > 15, TRUE, FALSE)
[1] TRUE

为了避免大量的强制操作(日期,数字,整数),我们可能需要使用as.POSIXlt,它允许将时间元素作为整数访问。

today <- as.POSIXlt(Sys.Date())
if (today$mday > 15L) today else {today$mon <- today$mon - 1L; today} 
# [1] "2021-09-30 UTC"
today <- as.POSIXlt("2021-09-14", tz='UTC')
if (today$mday > 15L) today else {today$mon <- today$mon - 1L; today} 
# [1] "2021-08-14 UTC"

或者,如果你想坚持使用lubridate

library(lubridate)
today <- Sys.Date()
if (day(today) > 15L) today else {month(today) <- month(today) - 1L; today} 
# [1] "2021-09-30"
today <- as.Date("2021-09-14")
if (day(today) > 15L) today else {month(today) <- month(today) - 1L; today} 
# [1] "2021-08-14"

实际上,这就是lubridate在引擎盖下所做的。

lubridate:::mday.default
# function (x) 
# as.POSIXlt(x, tz = tz(x))$mday

相关内容

  • 没有找到相关文章

最新更新