7
votes

Indéfini date_diff ()

J'essaie d'utiliser date_diff () code>: xxx pré>

sa ne fonctionne pas pour moi, donne une erreur: p>

Call to undefined function  date_diff()


0 commentaires

5 Réponses :


12
votes

La fonction Date_Diff nécessite une version PHP de 5,3 ou plus.

update strong> p>

Exemple de PHP 5.2 (tiré des commentaires de l'utilisateur Date_Diff). P >

<?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 \>"); 
?>


3 commentaires

Toute façon de l'utiliser sur PHP 5.2?


Cette solution est très inefficace


Vous avez demandé comment obtenir date_diff travailler, j'ai répondu avec la réponse claire de vous ne pouvez pas et proposer une solution simple, qui est venue directement des commentaires de l'utilisateur pour Date_Diff, je l'ai simplement copié la collée. Il existe de nombreuses façons de faire face à la question. Soustrayez les deux valeurs strtotime et la divisant par les bons segments serait une autre solution. Si vous voulez un moyen simple, mettez à niveau PHP.



1
votes

Voici une version qui n'utilise pas d'objets de date, mais celles-ci ne sont pas utilisées de toute façon en 5.2.

function date_diff($d1, $d2){
    $d1 = (is_string($d1) ? strtotime($d1) : $d1);
    $d2 = (is_string($d2) ? strtotime($d2) : $d2);  
    $diff_secs = abs($d1 - $d2);
    return floor($diff_secs / (3600 * 24));
}


1 commentaires

Je ne recommanderais pas d'utiliser cette approche car il ne considère pas possible les changements d'heure d'été: ini_set ('date.timezone', 'America / Los_Angeles'); écho _date_diff ('2011-03-13', '2011-03-14'); >> 0



1
votes
function date_diff($date1, $date2) { 
$count = 0; 
//Ex 2012-10-01 and 2012-10-20
if(strtotime($date1) < strtotime($date2))
{                       
  $current = $date1;                
  while(strtotime($current) < strtotime($date2)){ 
      $current = date("Y-m-d",strtotime("+1 day", strtotime($current))); 
      $count++; 
  } 
}                 
//Ex 2012-10-20 and 2012-10-01
else if(strtotime($date2) < strtotime($date1))
{           
  $current = $date2;                
  while(strtotime($current) < strtotime($date1)){ 
      $current = date("Y-m-d",strtotime("+1 day", strtotime($current))); 
      $count++;  
  }
  $current = $current * -1;
}
return $count; } 

1 commentaires

S'il vous plaît expliquer votre réponse.



1
votes

Convertissez d'abord les deux dates au format mm / dd / aaaa, puis faites ceci:

 $DateDiff = floor( strtotime($datetime2 ) - strtotime( $datetime1 ) ) / 86400 ;

//this will yield the resultant difference in days


2 commentaires

Grande solution sqlchild


@Jonmatthews: merci beaucoup monsieur, mon plaisir



0
votes

Conversion de votre DateTime en type de date UNIX et soustrayez-en un d'un autre: Le format -> ("u") est l'endroit où la dateTime est convertie.

$datetime1 = date_create('19.03.2010');
$datetime2 = date_create('22.04.2010');
$intervalInDays = ($datetime2->format("U") - $datetime1->format("U"))/(3600 * 24);


0 commentaires