27. februar 2004 - 20:44
Der er
4 kommentarer og 1 løsning
Ta' ikke ekstra skudår dage
Hejsa Jeg har følgende kode som jeg bruger til at trække de ekstra skudår dage - dog virker scriptet ikke rigtigt når f.eks. datoen er 29. 2. 1996 $tid_nu = mktime(); preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{4})/", $row[dato], $datoen); $tid_der = mktime(0,0,0, $datoen[2], $datoen[1], $datoen[3]); //Skud år //2004-2000-1996-1992-1988-1984-1980-1976-1972 $nu = date('Y'); $mrkaar = $datoen[3]; $skud_aar = array(1972,1976,1980,1984,1988,1992,1996,2000,2004,2008,2012); for($i = 0; $i <= count($skud_aar); $i++) { if($mrkaar <= $skud_aar[$i] and $nu != $mrkaar and $nu > $skud_aar[$i]) $tid_der += 86400; } $diff = $tid_nu - $tid_der; $years = intval($diff/(60*60*24*365)); $diff -= ($years*60*60*24*365); $months = intval($diff/(60*60*24*30)); $diff -= ($months*60*60*24*30); $days = intval($diff/(60*60*24)); Ok, det er lidt fucked at paste kode, men håber i kan se sammenhængen. Problemet er sikkert her: $tid_der += 86400; Det virker fint hvis man ikke subtrahere de ekstra dage.
Annonceindlæg fra Infor
27. februar 2004 - 22:18
#1
Hvad går det egentlig ud på. Kunne du prøve at forklare det på en anden måde?
Slettet bruger
27. februar 2004 - 23:34
#2
Amix, det lyder som om du er ved at gøre noget, der egentlig er ganske let, meget besværligt - i hvert fald, hvis du holder dig indenfor 1970-2038. Måske kan du få lidt inspiration fra dette script: <?php $gavetid=mktime(18,30,0,12,24,2004,0); setlocale(LC_TIME, "da_DK"); echo tidsafstand_tekst($gavetid); function tidsafstand_tekst($tid){ $afstand=tidsafstand($tid); $tekst=''; if ($afstand['year']!=0){ $tekst.="{$afstand['year']} år, "; } if ($afstand['mon']!=0){ $tekst.="{$afstand['mon']} måneder, "; } if ($afstand['mday']!=0){ $tekst.="{$afstand['mday']} dage, "; } if ($afstand['hours']!=0){ $tekst.="{$afstand['hours']} timer, "; } if ($afstand['minutes']!=0){ $tekst.="{$afstand['minutes']} minutter, "; } if ($afstand['seconds']!=0){ $tekst.="{$afstand['seconds']} sekunder, "; } $tekst=preg_replace('/(.*),\s(.*?),\s$/', '\\1 og \\2', $tekst); if ($afstand['fremtid']) { $tekst="Der er " . $tekst . " til " . strftime('%c',$tid); } else { $tekst=strftime('%c',$tid) . " var for " . $tekst . " siden."; } return $tekst; } function tidsafstand($tid){ if ($tid<time()){ $sidst=getdate(); $foerst=getdate($tid); $svar['fremtid']=FALSE; } else { $sidst=getdate($tid); $foerst=getdate(); $svar['fremtid']=TRUE; } $svar['seconds']=$sidst['seconds']-$foerst['seconds']; if ($svar['seconds']<0){$svar['seconds']+=60;$sidst['minutes']-=1;} $svar['minutes']=$sidst['minutes']-$foerst['minutes']; if ($svar['minutes']<0){$svar['minutes']+=60;$sidst['hours']-=1;} $svar['hours']=$sidst['hours']-$foerst['hours']; if ($svar['hours']<0){$svar['hours']+=24;$sidst['mday']-=1;} $svar['mday']=$sidst['mday']-$foerst['mday']; if ($svar['mday']<0) { if ($svar['fremtid']){ $temp=date('t',mktime(0,0,0,$sidst['mon']-1,1,$sidst['year'])); } else { $temp=date('t',mktime(0,0,0,$foerst['mon'],1,$foerst['year'])); } $svar['mday']+=$temp; $sidst['mon']-=1; } $svar['mon']=$sidst['mon']-$foerst['mon']; if ($svar['mon']<0){$svar['mon']+=12;$sidst['year']-=1;} $svar['year']=$sidst['year']-$foerst['year']; return $svar; } ?>
28. februar 2004 - 02:47
#3
Hvad handler det om?
28. februar 2004 - 17:03
#4
Detox en script som beregner hvor gamle folk er - i år, måneder og dage. Har selv løst problemet ved at bruge nogle ASP funktioner i PHP - selvom jeg aldrig har programmeret i ASP Ø_Ø. Her er arbejdskoden, hvis nogen skulle løbe i samme problem. Ikke lige det reneste kode, da dette er mit test script ;) function datediff($per,$d1,$d2) { $d = $d2-$d1; switch($per) { case "yyyy": $d/=12; case "m": $d*=12*7/365.25; case "ww": $d/=7; case "d": $d/=24; case "h": $d/=60; case "n": $d/=60; } return round($d); } function dateadd($per,$n,$d) { switch($per) { case "yyyy": $n*=12; case "m": $d=mktime(date("H",$d),date("i",$d) ,date("s",$d),date("n",$d)+$n ,date("j",$d),date("Y",$d)); $n=0; break; case "ww": $n*=7; case "d": $n*=24; case "h": $n*=60; case "n": $n*=60; } return $d+$n; } preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{4})/", $row[dato], $datoen); $dato = mktime(0,0,0, $datoen[2], $datoen[1], $datoen[3]); $years = datediff ('yyyy', $dato, mktime()); $dato = dateadd('yyyy', $years, $dato); $monthz = datediff('m', $dato, mktime()); if($monthz < 0) { $dato = dateadd("yyyy",-1, $dato); $monthz = datediff ("m",$dato,mktime()); $years = $years - 1; } $dato = dateAdd("m",$monthz,$dato); $dayz= datediff ("d",$dato,mktime()); if ($dayz < 0) { if ($monthz > 0) { $monthz -= 1; } else { $years -= 1; $monthz = 11; } $dato = dateadd("m",-1,$dato); $dayz = datediff ("d",$dato,mktime()); } if($years == 0) { $years = ''; } else { $years = $years.' år'; } $dayz = abs($dayz);
23. marts 2004 - 22:30
#5
over and out
Vi tilbyder markedets bedste kurser inden for webudvikling