Sıçrama-yıl olmadan PHP strtotime

0 Cevap php

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.

0 Cevap