this thread ile ilgili olarak, kısmi bir çözüm geliştirdik:
function strtosecs($time,$now=null){
static $LEAPDIFF=86400;
$time=strtotime($time,$now);
return $time-(round((date('Y',$time)-1968)/4)*$LEAPDIFF);
}
Fonksiyonu sıçrama-yıllık kontrol etmeden bir dize verilen saniye sayısını almak gerekiyordu.
Bu sıçrama-yıl sayısını hesaplarken yok 1970 [(yıl-1986) / 4], sonunda, bu saniyede sadece sayı hangi bir sıçrama yıl ve normal bir yıl arasında (saniye farkı ile çarpılması bir gün).
Son olarak, ben sadece hesaplanan zaman tüm bu aşırı sıçrama-yıllık saniye kaldırmak. İşte giriş / çıkışların bazı örnekler var:
// 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
You will probably ask why am I doing a division on the output? It's to test it out; 31536000 is the number of seconds in a year, so that 19.99... should be 20 and 0.99... should be a 1. Sure, I could round it all and get "correct" answer, but I'm worried about the inaccuracies.
Bu apaçık ortada olmadığından Edit1:, benim sorunum inveteracies ile; Doğru, ... sadece 20 yıldır PHP sormayın ve size 19,99 verir?
Edit2: Her 1968 hakkında kısmına kadar kaynatın görünüyor;
- 1970; Ben denedim tüm testlerde bu doğru buldum.
- 1969; Bulunan Bu used here ({[(1)}]) yanı sıra, mentioned here. Itibaren 2 yıl (+3 yıl) sonra kesin.
- 1968; aşağıda ayrıntılı olarak, bu unix zaman (1970) artık yıl "sıfır yıl" dır. Bu (benim için) "hakkı" geliyor ama doğru değildir, at all.