Autor | Zpráva | ||
---|---|---|---|
Martin87 Profil * |
#1 · Zasláno: 9. 6. 2009, 12:02:27
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 |
#2 · Zasláno: 9. 6. 2009, 12:17:42 · Upravil/a: petr 6
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 * |
#3 · Zasláno: 9. 6. 2009, 12:29:54
A nesel by ten kod lehce upravit, aby to slo spravne? Nebo je to od zakladu spatne?
|
||
petr 6 Profil |
#4 · Zasláno: 9. 6. 2009, 13:18:34 · Upravil/a: petr 6
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 * |
#5 · Zasláno: 9. 6. 2009, 13:38:21
petr 6
Diky moc |
||
petr 6 Profil |
#6 · Zasláno: 9. 6. 2009, 13:47:36
Neni zac, mne se to taky hodi, akorat koukam, ze radek 6 jde zapsat jednoduseji
$daydiff+=date("t",strtotime("-1 month")); |
||
Časová prodleva: 15 let
|
0