Tag Archives: dmy

Ημέρες – Μήνες – Έτη (php)

Λίγος κώδικας σε 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);
//----------------------------------------------------------------------------

?>

Ημέρες – Μήνες – Έτη

Όσοι θέλουν τη διαφορά ημερομηνιών σε ημέρες μήνες έτη ας μην ψάξουν παραπέρα. Εγώ τη χρειάστηκα πρόσφατα και φαίνεται να δουλεύει σωστά (όσο μπόρεσα να την τεστάρω με δεδομένα και αποτελέσματα που είχα έτοιμα σε κάποια αρχεία excel.) Continue reading