当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R lubridate mplus 在日期中添加和减去月份,但不超过新月份的最后一天


添加月份会妨碍基本算术,因为连续月份的长度不同。与其他元素一起,有助于算术执行自动翻转。例如,12:00:00 + 61 秒变为 12:01:01。然而,人们通常希望这种行为不要在几个月内发生。例如,我们有时需要 1 月 31 日 + 1 个月 = 2 月 28 日,而不是 3 月 3 日。%m+% 执行此类算术。 Date %m+%months(n) 始终返回 Date 之后第 n 个月的日期。如果新日期通常会溢出到第 n + 1 个月,%m+% 将返回第 n 个月的最后一天 (rollback() )。 Date %m-%months(n) 始终返回 Date 之前第 n 个月的日期。

用法

e1 %m+% e2

add_with_rollback(e1, e2, roll_to_first = FALSE, preserve_hms = TRUE)

参数

e1

POSIXltPOSIXctDate 的句点或日期时间对象。

e2

POSIXltPOSIXctDate 的句点或日期时间对象。请注意,e1 和 e2 之一必须是句点,另一个必须是日期时间对象。

roll_to_first

回滚到该月的第一天而不是上个月的最后一天(传递给 rollback() )

preserve_hms

保留相同的小时、分钟和秒信息?如果为 FALSE,新日期将为 00:00:00(传递给 rollback() )

POSIXlt、POSIXct 或 Date 类的日期时间对象

细节

%m+%%m-% 通过首先添加/减去月份,然后使用较小的单位执行常规算术来处理组件小于一个月的周期。

%m+%%m-% 应谨慎使用,因为它们不是一对一的操作,并且两者的结果将对操作顺序敏感。

例子

jan <- ymd_hms("2010-01-31 03:04:05")
jan + months(1:3) # Feb 31 and April 31 returned as NA
#> [1] NA                        "2010-03-31 03:04:05 UTC"
#> [3] NA                       
# NA "2010-03-31 03:04:05 UTC" NA
jan %m+% months(1:3) # No rollover
#> [1] "2010-02-28 03:04:05 UTC" "2010-03-31 03:04:05 UTC"
#> [3] "2010-04-30 03:04:05 UTC"

leap <- ymd("2012-02-29")
"2012-02-29 UTC"
#> [1] "2012-02-29 UTC"
leap %m+% years(1)
#> [1] "2013-02-28"
leap %m+% years(-1)
#> [1] "2011-02-28"
leap %m-% years(1)
#> [1] "2011-02-28"

x <- ymd_hms("2019-01-29 01:02:03")
add_with_rollback(x, months(1))
#> [1] "2019-02-28 01:02:03 UTC"
add_with_rollback(x, months(1), preserve_hms = FALSE)
#> [1] "2019-02-28 UTC"
add_with_rollback(x, months(1), roll_to_first = TRUE)
#> [1] "2019-03-01 01:02:03 UTC"
add_with_rollback(x, months(1), roll_to_first = TRUE, preserve_hms = FALSE)
#> [1] "2019-03-01 UTC"
源代码:R/ops-m+.r

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Add and subtract months to a date without exceeding the last day of the new month。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。