首页 > 解决方案 > 仅计算月份和日期的时差

问题描述

我想仅考虑天数和月份来计算时差。例如:

> as.Date("2018-12-15")-as.Date("2018-12-16")
Time difference of -1 days

> as.Date("2008-12-15")-as.Date("2018-12-16")
Time difference of -3653 days

我希望他们两个都返回-1。

编辑:不应考虑闰年,因为我们只需要一个近似值,而返回值不需要精确。

标签: rdatetime

解决方案


正如@Omry Atia 所建议的,我们可以将年份组件设置为同一年,然后计算差异。

library(lubridate)

get_difference_without_years <- function(x, y) {
    x <- ymd(x)
    year(x) <- 2018
    y <- ymd(y)
    year(y) <- 2018
    x - y
}


get_difference_without_years("2018-12-15", "2018-12-16")
#Time difference of -1 days

get_difference_without_years("2008-12-15", "2018-12-16")
#Time difference of -1 days

将其保留在基础 R 中

get_difference_without_years <- function(x, y) {
  x <- as.Date(paste0("2018-", format(as.Date(x), "%m-%d")))
  y <- as.Date(paste0("2018-", format(as.Date(y), "%m-%d")))
  x - y
}

get_difference_without_years("2008-12-15", "2018-12-16")
#Time difference of -1 days
get_difference_without_years("2018-12-15", "2018-12-16")
#Time difference of -1 days

推荐阅读