Dag beste mensen,

Ik ben nog maar een beginner met PHP maar ik heb een script nodig die het verschil uitrekend tussen 2 datums in dagen, maanden en jaren.

Stel ik geef een variabel de datum 07-11-2004 mee en ik bekijk morgen dat script dat ik dan een output zie met : ..dagen, ..maanden en .. jaren geleden.

Zou iemand mij hiermee kunnen helpen?

Ik heb wel wat geprobeert met het volgende script maar helaas werkt het niet :(


<?php

function loveteller($start, $periodLenght, $breakLength) { 
    $nu = time(); 
    $timestamp = mktime(date('H', $start), date('i', $start), date('s', $start), date('m'), date('d'), date('Y')); 
    $verschil = ($nu - $start);
    $jaren = floor($verschil / 31536000);
    $verschil += (-31536000 * $jaren);

    $dagen = floor($verschil / 86400); 
    $verschil += (-86400 * $dagen);

    $textDagen = $dagen == 1 ? 'dag' : 'dagen'; 
        

           if (date('m') == 1) { $maand = floor($verschil / 2678400);
                                $verschil += (-2678400 * $maand); } 

           if (date('m') == 2) { $maand = floor($verschil / 2419200); 
                                $verschil += (-2419200 * $maand); } 

           if (date('m') == 3) { $maand = floor($verschil / 2678400); 
                                $verschil += (-2678400 * $maand); } 

           if (date('m') == 4) { $maand = floor($verschil / 2592000); 
                                $verschil += (-2592000 * $maand); } 

           if (date('m') == 5) { $maand = floor($verschil / 2678400);
                                $verschil += (-2678400 * $maand); }

           if (date('m') == 6) { $maand = floor($verschil / 2592000);
                                $verschil += (-2592000 * $maand); }

           if (date('m') == 7) { $maand = floor($verschil / 2678400);
                                $verschil += (-2678400 * $maand); }

           if (date('m') == 8) { $maand = floor($verschil / 2678400);
                                $verschil += (-2678400 * $maand); }

           if (date('m') == 9) { $maand = floor($verschil / 2419200);
                                $verschil += (-2419200 * $maand); }

           if (date('m') == 10) { $maand = floor($verschil / 2678400); 
                                 $verschil += (-2678400 * $maand); }

           if (date('m') == 11) { $maand = floor($verschil / 2419200); 
                                 $verschil += (-2419200 * $maand); }

           if (date('m') == 12) { $maand = floor($verschil / 2678400); 
                                 $verschil += (-2678400 * $maand); }

   $textMaand = $maand == 1 ? 'maand' : 'maanden';

   $output = 'Al '.$dagen.' '.$textDagen.', '.$maand.' '.$textMaand.' en '.$jaren.' hebben ... en ... met elkaar'; 
        
   return $output; 
} 
echo loveteller(mktime(00, 00, 00, 11, 7, 2005), (8 * 60 * 60), (15 * 60)); 

?>


Wie weet hoe dit moet?
Weet echt niemand het? 8-)
Wat werkt er dan niet? Foutmeldingen, resultaten, etc.
Ik krijg nu deze output :

Al 214 dagen , 0 maanden -1 hebben ... en ... met elkaar

Maar dat klopt dus voor geen meter... iemand enig idee?
Ik krijg trouwens geen Parsefouten, dus de syntax is goed lijkt mij alleen word het toch ergens verkeerd berekend.
Deze is wat korter en doet het ook nog eens best goed.

Het enige probleem is dat deze functie werkt met een gemiddeld aantal dagen in een maand, hierdoor zou je afrondingsfouten kunnen krijgen.

<?php
function loveteller( $beg_date = '', $end_date = '' )
{
if( $beg_date == '' || $end_date == '' )
return;

if( substr_count($beg_date, '-') != 2 || substr_count($end_date, '-') != 2 )
return;

# De beide datums omzetten naar timestamps,
# hierdoor kun je er veel beter mee rekenen.
# Een datum ziet er zo uit: dd-mm-yyyy (07-11-2004)
$tmp1 = explode('-', $beg_date);
$tmp2 = explode('-', $end_date);
$ts_beg_date = mktime(0, 0, 0, $tmp1[1], $tmp1[0], $tmp1[2]);
$ts_end_date = mktime(0, 0, 0, $tmp2[1], $tmp2[0], $tmp2[2]);

# Het verschil tussen deze twee timestamps berekenen
$ts_delta = $ts_end_date >= $ts_beg_date ? $ts_end_date - $ts_beg_date : $ts_beg_date - $ts_end_date;

# Bepalen hoerveel jaar, maanden, dagen in de $ts_delta zitten;
$ts_delta = $ts_delta / 86400;

$aResult = array(0, 0);
$aTimes = array(365, 30.42); //30.42 = 365/12

foreach( $aTimes as $key => $time ){
while( $time <= $ts_delta ){

$ts_delta -= $time;
$aResult[$key]++;
}
}
$dagen = round($ts_delta);

return "Jaren: {$aResult[0]} Maanden: {$aResult[1]} Dagen: $dagen";
}

echo loveteller('10-12-2004', '15-12-2005').'<br>';
echo loveteller('10-1-2004', '18-12-2005').'<br>';

?>

Reageren