关于这个线程,我开发了一个部分解决方案:
function strtosecs($time,$now=null){
static $LEAPDIFF=86400;
$time=strtotime($time,$now);
return $time-(round((date('Y',$time)-1968)/4)*$LEAPDIFF);
}
该函数应该在不检查闰年的情况下获取给定字符串的秒数。
它会计算 1970 年的闰年 [(year-1986)/4] 的数量,将其乘以闰年和正常年份之间的秒数差(最后,它只是一天)。
最后,我只是从计算的时间中删除了所有多余的闰年秒数。以下是输入/输出的一些示例:
// test code
echo strtosecs('+20 years',0).'=>'.(strtosecs('+20 years',0)/31536000);
echo strtosecs('+1 years',0).'=>'.(strtosecs('+1 years',0)/31536000);
// test output
630676800 => 19.998630136986
31471200 => 0.99794520547945
你可能会问我为什么要对输出做除法?这是为了测试它;31536000 是一年中的秒数,因此 19.99... 应该是 20 而 0.99... 应该是 1。当然,我可以将其全部舍入并得到“正确”的答案,但我担心不准确。
编辑1:因为它看起来并不明显,所以我的问题在于陈旧;你只是不问 PHP 20 年,它给你 19.99...,对吗?
Edit2:这一切似乎都归结为 1968 年的部分;