Autor Zpráva
Martin87
Profil *
Dobry den, mam problem s pocitanim veku. Napr. kdyz zadam datum narozeni 9. ledna, tak se mi zobrazi 4 mesice a 29 dni a pritom by melo 5 mesicu... Nevite, kde je chyba?

$stamp = strtotime("09 january 2009 00:00:00"); 
$stamp2 = strtotime("now"); 
$diff = ($stamp2 - $stamp);


$years = floor($diff / 31556927.29); 
$months = floor(($diff -$years * 31556927.29)/ 2629743.941); 
$days = floor(($diff- $years * 31556927.29 - $months * 2629743.941) / 86400);

$return = "$years let $months mesicu a $days dni";
echo $return;
petr 6
Profil
Mezi 9. lednem a 9. unorem je mesic. A mezi 9. unorem a 9. breznem je taky mesic. Ackoliv v prvnim pripade se jedna o 31 dni a v druhem o 28 (nebo 29) dni.
Tam bude asi "chyba" - ty mas mesic definovany jako 30.44 dni, takze v tvem pripade 4 mesice + 29 dni = 150.75 dni < 5 mesicu = 5*30.44 dni = 152.18 dni

Jinymi slovy: Chyba je v uvaze, ze vsechny mesice jsou stejne dlouhe
Martin87
Profil *
A nesel by ten kod lehce upravit, aby to slo spravne? Nebo je to od zakladu spatne?
petr 6
Profil
Zalezi na tvoji definici mesice.

Ja bych to udelal takto:
$date="10 June 2008";//napr. toto datum vyhodi 0 years 11 months 30 days, protoze od 10.6.2008 jeste neuplynul cely rok
$daydiff=date("j")-date("j",strtotime($date));
$monthdiff=date("n")-date("n",strtotime($date));
$yeardiff=date("Y")-date("Y",strtotime($date));
if($daydiff<0){
  $daydiff=date("j")+date("t",strtotime("-1 month"))-date("j",strtotime($date)); 
  $monthdiff--;
  }
if($monthdiff<0){
  $monthdiff+=12; 
  $yeardiff--;
  }
echo $yeardiff." years, ".$monthdiff." months, ".$daydiff." days";
Martin87
Profil *
petr 6
Diky moc
petr 6
Profil
Neni zac, mne se to taky hodi, akorat koukam, ze radek 6 jde zapsat jednoduseji
$daydiff+=date("t",strtotime("-1 month"));

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: