日期差的计算不准确

时间:2018-07-04 10:19:59

标签: r date lubridate

我尝试使用Sys.time()查找开始日期到当前时间的天数持续时间。我使用以下命令来查找持续时间。但是,R中的输出是完全错误的。

person$duration <-  lubridate::interval(as.Date(person$create_date, "%m/%d/%y"),Sys.Date()) %/% days()

输出:

Name          create_date       duration            
A             09/23/2014        -811       
B             05/05/2014        -670      

应该是 1380天,而不是-811。我不确定为什么它是负数,为什么特别是'-811'或'-670'。

2 个答案:

答案 0 :(得分:4)

您非常亲密。由于您的年份由4位数字组成,因此您需要使用大写字母Y。

library(lubridate)
interval(as.Date("09/23/2014", "%m/%d/%Y"),Sys.Date()) %/% days()

给予1380。

在您的代码中,只使用了前两位数字,并且假设您要使用当前世纪,因此是2020年。确切的说:如果您每年提供两个数字,则介于69和99之间的值将转换为1969年-1999,值介于00到68到2000-2068之间。

interval(as.Date("09/23/2020", "%m/%d/%Y"),Sys.Date()) %/% days()

也给出-811。

答案 1 :(得分:3)

使用简单的区别

as.numeric(as.Date("2018-07-05") - Sys.Date())
# use abs() if the date it's in the past