Bonjour,

Voila je rencontre un petit problème avec mon code.

Je dois afficher un interval entre la date(now) et la date de l'enregistrment pour afficher ex (il a 2min)
J'ai écri un code en me basant sur la doc php, celui-ci fonctionne en local mais pas en distant (avec la même version de php)

J'ai ma class :

class Date
{
    public function timeInterval($date1, $date2 = '')
    {

        if($date2 === ''){
            $now = time();
        }else{
            $dat2 = time($date2);
            $now = $dat2;
        }
        $time1 = time($date1);
        $interval = $this->time_elapsed_B($now-$time1);
        return $interval;
    }

    function time_elapsed_A($secs){
        $bit = array(
            'y' => $secs / 31556926 % 12,
            'w' => $secs / 604800 % 52,
            'd' => $secs / 86400 % 7,
            'h' => $secs / 3600 % 24,
            'm' => $secs / 60 % 60,
            's' => $secs % 60
        );

        foreach($bit as $k => $v)
            if($v > 0)$ret[] = $v . $k;
    }

    function time_elapsed_B($secs){
        $bit = array(
            ' an'        => $secs / 31556926 % 12,
            ' semaine'        => $secs / 604800 % 52,
            ' jour'        => $secs / 86400 % 7,
            ' heure'        => $secs / 3600 % 24,
            ' minute'    => $secs / 60 % 60,
            ' seconde'    => $secs % 60
        );

        foreach($bit as $k => $v){
            if($v > 1)$ret[] = $v . $k . 's';
            if($v == 1)$ret[] = $v . $k;
        }
        array_splice($ret, count($ret)-1, 0, 'et');
        $ret[] = '';

        return join($ret, ' ');
    }
    function unix_timestamp($date)
    {
        $date = str_replace(array(' ', ':'), '-', $date);
        $c    = explode('-', $date);
        $c    = array_pad($c, 6, 0);
        array_walk($c, 'intval');

        return mktime($c[3], $c[4], $c[5], $c[1], $c[2], $c[0]);
    }
}

Ensuite je l'utilise dans mon code de cette façon :

$mouvdate = new \Core\Date\Date();
$datenow = new DateTime();
$datepost = $m->date;
$now = date_timestamp_get($datenow);
$date = $mouvdate->unix_timestamp($datepost);
$interval = $mouvdate->time_elapsed_A($now-$date);

sur le serveur $interval me retourne NULL

3 réponses


cid5420
Auteur
Réponse acceptée

Euh non mais j'ai trouvé : pour ceux que ça interresse j'ai oublier de retourner le tableau dans ma fonction.
Code corrigé :

class Date
{
    public function timeInterval($date1, $date2 = '')
    {

        if($date2 === ''){
            $now = time();
        }else{
            $dat2 = time($date2);
            $now = $dat2;
        }
        $time1 = time($date1);
        $interval = $this->time_elapsed_B($now-$time1);
        return $interval;
    }

    function time_elapsed_A($secs){
        $bit = array(
            'y' => $secs / 31556926 % 12,
            'w' => $secs / 604800 % 52,
            'd' => $secs / 86400 % 7,
            'h' => $secs / 3600 % 24,
            'm' => $secs / 60 % 60,
            's' => $secs % 60
        );

        foreach($bit as $k => $v){
            if($v > 0){
                $ret[] = $v . $k;
            }
        }
        $ret[] = '';
        return join($ret, ' ');
    }

    function time_elapsed_B($secs){
        $bit = array(
            ' an'        => $secs / 31556926 % 12,
            ' semaine'        => $secs / 604800 % 52,
            ' jour'        => $secs / 86400 % 7,
            ' heure'        => $secs / 3600 % 24,
            ' minute'    => $secs / 60 % 60,
            ' seconde'    => $secs % 60
        );

        foreach($bit as $k => $v){
            if($v > 1)$ret[] = $v . $k . 's';
            if($v == 1)$ret[] = $v . $k;
        }
        array_splice($ret, count($ret)-1, 0, 'et');
        $ret[] = '';

        return join($ret, ' ');
    }
    function unix_timestamp($date)
    {
        $date = str_replace(array(' ', ':'), '-', $date);
        $c    = explode('-', $date);
        $c    = array_pad($c, 6, 0);
        array_walk($c, 'intval');

        return mktime($c[3], $c[4], $c[5], $c[1], $c[2], $c[0]);
    }
}

Regarde du coté de Carbon http://carbon.nesbot.com/docs/

Personellement j'utilise un fork de Carbon qui gère mieux le francais pour traiter mes dates : https://packagist.org/packages/jenssegers/date

La fonction difForHumans fait exactement ce que tu veux http://carbon.nesbot.com/docs/#api-humandiff

cid5420
Auteur

Merci, je connaissais pas du coup je vais regarder de plus près