当我在lubridate包中使用as.numeric和period时,我无法理解以单位arg使用月份值的结果。 也许它是一个包?
$user = User::where('email', $userdata['email'])->first();
if($user->hasUsername())
{
// do somethin
}
结果:
a <- period(years = 1, months = 3, days = 1)
as.numeric(a, 'days')
as.numeric(a, 'years')
as.numeric(a, 'months')
提前致谢
答案 0 :(得分:1)
这看起来像个错误。我相信这种转换是使用lubridate:::seconds_to_unit
完成的,在lubridate版本1.6.0上看起来像这样:
> lubridate:::seconds_to_unit
function (secs, unit = "second")
{
switch(unit, second = secs, minute = secs/60, hour = secs/3600,
day = secs/86400, month = secs/(86400 * 365.25)/12, week = secs/(86400 *
7), year = secs/(86400 * 365.25), stop("invalid unit ",
unit))
}
<environment: namespace:lubridate>
请注意这一部分:
month = secs/(86400 * 365.25)/12
显然,这里的想法是86400*365.25
是每年的秒数,将其除以12
每月的秒数。但它应该是:
month = secs/((86400 * 365.25)/12)
(注意附加的括号。)
由于这个错误,你得到的答案比它应该小144倍。
我相信这也是这个错误的原因:https://github.com/hadley/lubridate/issues/490
(它被描述为给出预期结果的倒数。这只是因为他们碰巧选择了12个月的间隔,所以除以144就会给你一个月的1/12。)