2010-11-20 5 views
1

Ma fonction de PHP convertit une chaîne de date-heure en manière plus lisible pour représenter la date et l'heure passées. Cela fonctionne parfaitement dans la version 5.3.0 de PHP mais sur le serveur c'est la version 5.2.17 de PHP qui manque de cette fonction. Existe-t-il un moyen de résoudre ce problème efficacement? Ce n'est pas seulement une fonction qui a besoin de cette fonction "diff" mais il y en a beaucoup d'autres.Fonction absente de PHP dans la version plus ancienne

public function ago($dt1) 
{ 
    $interval = date_create('now')->diff(date_create($dt1)); 
    $suffix = ($interval->invert ? ' ago' : '-'); 
    if ($v = $interval->y >= 1) return $this->pluralize($interval->y, 'year') . $suffix; 
    if ($v = $interval->m >= 1) return $this->pluralize($interval->m, 'month') . $suffix; 
    if ($v = $interval->d >= 1) return $this->pluralize($interval->d, 'day') . $suffix; 
    if ($v = $interval->h >= 1) return $this->pluralize($interval->h, 'hour') . $suffix; 
    if ($v = $interval->i >= 1) return $this->pluralize($interval->i, 'minute') . $suffix; 
    return $this->pluralize($interval->s, 'second') . $suffix; 
} 

Répondre

1

Je suis venu à cette fonction réécrite qui fonctionne assez bien .

class DateTimeFormatter 
{ 
    private $now; 
    public $invert; 
    public $y, $m, $d, $h, $i, $s; 

    function DateTimeFormatter() 
    { 
     $this->now = date_parse(date("Y-m-d H:i:s")); 
    } 

    function now() 
    { 
     $this->now = date_parse(date("Y-m-d H:i:s")); 
     return $this->now; 
    } 

    function diff($dt) 
    { 
     if (!is_array($dt)) 
      $dt = date_parse($dt); 

     if ($this->now() > $dt) 
     { 
      $this->invert = 1; 
      $this->y = $this->now['year'] - $dt['year']; 
      $this->m = $this->now['month'] - $dt['month']; 
      $this->d = $this->now['day'] - $dt['day']; 
      $this->h = $this->now['hour'] - $dt['hour']; 
      $this->i = $this->now['minute'] - $dt['minute']; 
      $this->s = $this->now['second'] - $dt['second']; 
     } 
     else 
     { 
      $this->invert = 0; 
      $this->y = $dt['year'] - $this->now['year']; 
      $this->m = $dt['month'] - $this->now['month']; 
      $this->d = $dt['day'] - $this->now['day']; 
      $this->h = $dt['hour'] - $this->now['hour']; 
      $this->i = $dt['minute'] - $this->now['minute']; 
      $this->s = $dt['second'] - $this->now['second']; 
     } 

     return $this;        
    } 

    function ago($datetime) 
    { 
     $interval = $this->diff($datetime); 
     $suffix = ($interval->invert ? ' ago' : ''); 
     if ($v = $interval->y >= 1) return $this->pluralize($interval->y, 'year') . $suffix; 
     if ($v = $interval->m >= 1) return $this->pluralize($interval->m, 'month') . $suffix; 
     if ($v = $interval->d >= 1) return $this->pluralize($interval->d, 'day') . $suffix; 
     if ($v = $interval->h >= 1) return $this->pluralize($interval->h, 'hour') . $suffix; 
     if ($v = $interval->i >= 1) return $this->pluralize($interval->i, 'minute') . $suffix; 
     return $this->pluralize($interval->s, 'second') . $suffix; 
    } 

    function pluralize($count, $text) 
    { 
     return $count . (($count == 1) ? (" $text") : (" ${text}s")); 
    } 
} 
3

La réponse se trouve dans le commentaire juste en dessous de celui que vous avez trouvé votre code sur php.net: http://php.net/manual/en/datetime.diff.php

<?php 
function date_diff($date1, $date2) { 
    $current = $date1; 
    $datetime2 = date_create($date2); 
    $count = 0; 
    while(date_create($current) < $datetime2){ 
     $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current))); 
     $count++; 
    } 
    return $count; 
} 

echo (date_diff('2010-3-9', '2011-4-10')." days <br \>"); 
?> 
+0

et vous pouvez l'ajouter à votre application avec 'if (! Function_exists (« DATE_DIFF »)) {// déclarer la fonction ici}' si vous avez l'habitude de la peine quelle version est sur le serveur. – Gordon

+0

mais j'ai spécifiquement besoin de la fonction "diff" – Neutralizer

+0

@Umair Voir le manuel. 'date_diff' est l'alias procédural de' Date :: diff' – Gordon

Questions connexes