當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。