Λίγος κώδικας σε PHP που επιστρέφει τη διαφορά δύο ημερομηνιών σε Ημέρες – Μήνες – Έτη, αφού οι DateTime::Diff() και date_diff() που παρέχει η PHP τα κάνουν μαντάρα.
Για συντομία και καθαρότητα του κώδικα δεν μπήκαν έλεγχοι με ποια σειρά έχουν δοθεί οι ημερομηνίες, οπότε περιμένει να είναι πρώτα η παλαιότερη και μετά η μεταγενέστερη.
function dmydiff($dateS, $dateE) { $dS = getdate($dateS); $dE = getdate($dateE); $DMY = array('Y'=>0, 'M'=>0, 'D'=>0); $DMY['Y'] = $dE['year'] - $dS['year']; $DMY['M'] = $dE['mon'] - $dS['mon']; $DMY['D'] = $dE['mday'] - $dS['mday']; if ($DMY['D'] < 0) { $dT = mktime(0,0,0,$dS['mon']+1,1,$dS['year']); $dT = intval(($dT - $dateS) / (24*60*60)); $DMY['D'] = $dT + $dE['mday'] - 1; $DMY['M']--; } if ($DMY['M'] < 0) { $DMY['Y']--; $DMY['M'] += 12; } return $DMY; }
Ο δοκιμαστικός κώδικας που φαίνεται παρακάτω βγάζει τα εξής αποτελέσματα.
Start Date: 31/01/2012 End Date : 20/03/2013 Using DateTime::Diff() or date_diff() functions Years : 1 Months : 1 Days : 17 Using custom PHP Source code Years : 1 Months : 1 Days : 20
Και τέλος ο κώδικας…
<?php header('Content-type: text/plain'); date_default_timezone_set('Europe/Athens'); //---------------------------------------------------------------------------- $dtStart = mktime(0,0,0,1,31,2012); //31/01/2012 $dtStop = mktime(0,0,0,3,20,2013); //20/03/2013 $daySecs = 24 * 60 * 60; echo PHP_EOL; echo 'Start Date: ',strftime('%d/%m/%Y',$dtStart),PHP_EOL; echo 'End Date : ',strftime('%d/%m/%Y',$dtStop),PHP_EOL,PHP_EOL; //---------------------------------------------------------------------------- echo 'Using DateTime::Diff() or date_diff() functions',PHP_EOL; $dtStart = date_date_set(date_create(),2012,1,31); //31/01/2012 $dtStop = date_date_set(date_create(),2013,3,20); //20/03/2013 $diff = date_diff($dtStart,$dtStop); echo 'Years : ',$diff->y,PHP_EOL, 'Months : ',$diff->m,PHP_EOL, 'Days : ',$diff->d,PHP_EOL,PHP_EOL; unset($diff); //---------------------------------------------------------------------------- echo 'Using custom PHP Source code',PHP_EOL; function dmydiff($dateS, $dateE) { $dS = getdate($dateS); $dE = getdate($dateE); $DMY = array('Y'=>0, 'M'=>0, 'D'=>0); $DMY['Y'] = $dE['year'] - $dS['year']; $DMY['M'] = $dE['mon'] - $dS['mon']; $DMY['D'] = $dE['mday'] - $dS['mday']; if ($DMY['D'] < 0) { $dT = mktime(0,0,0,$dS['mon']+1,1,$dS['year']); $dT = intval(($dT - $dateS) / (24*60*60)); $DMY['D'] = $dT + $dE['mday'] - 1; $DMY['M']--; } if ($DMY['M'] < 0) { $DMY['Y']--; $DMY['M'] += 12; } return $DMY; } $dtStart = mktime(0,0,0,1,31,2012); //31/01/2012 $dtStop = mktime(0,0,0,3,20,2013); //20/03/2013 $diff = dmyDiff($dtStart, $dtStop); echo 'Years : ',$diff['Y'],PHP_EOL, 'Months : ',$diff['M'],PHP_EOL, 'Days : ',$diff['D'],PHP_EOL,PHP_EOL; unset($diff); //---------------------------------------------------------------------------- ?>
Ο κώδικας για το αντίστοιχο php extension module βρίσκεται εδώ.
Οι functions που υποστηρίζονται είναι οι: