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
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