如何准确地将以下产品(单位为天)转换difftime为年,月和日?
difftime(Sys.time(),"1931-04-10")
difftime(Sys.time(),"2012-04-10")
Run Code Online (Sandbox Code Playgroud)
这需要多年和几天,但我怎么能包括几个月?
yd.conv<-function(days, print=TRUE){
x<-days*0.00273790700698851
x2<-floor(x)
x3<-x-x2
x4<-floor(x3*365.25)
if (print) cat(x2,"years &",x4,"days\n")
invisible(c(x2, x4))
}
yd.conv(difftime(Sys.time(),"1931-04-10"))
yd.conv(difftime(Sys.time(),"2012-04-10"))
Run Code Online (Sandbox Code Playgroud)
我也不确定如何定义月份.将4个星期视为一个月或同一个月的过去.因此,对于一个月的后期定义,如果初始日期是2012-01-10和当前的2012-05-31那么我们将有0年,5个月和21天.这样做效果不错,但如果原始日期是在该月的31日,而结束日期是在2月28日那么这将被视为一个月?
当我写这个问题时,问题本身就发生了变化,所以我最好澄清一下:
定义几个月然后如何在几年,几个月和几天找到差异时间的最佳(最合乎逻辑的方法)是什么?
如果你正在做类似的事情
difftime(Sys.time(), someDate)
Run Code Online (Sandbox Code Playgroud)
暗示你必须知道someDate是什么.在这种情况下,您可以将其转换为POSIXct类对象,使您能够直接提取时态信息(包chron也提供更多方法).例如
as.POSIXct(c(difftime(Sys.time(), someDate, units = "sec")), origin = someDate)
Run Code Online (Sandbox Code Playgroud)
这将返回您想要的日期对象.如果你有一个时区tz来提供difftime,你也可以直接将它传递给as.POSIXct中的tz参数.
现在你有了你的日期对象,你可以运行类似的东西months(.),如果你有chron,你可以做(years(.)和days(.)返回有序因子).
从这里开始,您可以分别对年,月和日的差异进行更简单的数学计算(转换为适当的数字表示).当然,将someDate转换为POSIXct是必需的.
编辑:第二个想法,months(.)返回一个月的字符表示,因此可能效率不高.至少,它需要一点处理(不太难)来给出数字表示.