2011-01-22 1 views
1

J'ai besoin d'une fonction en php4 qui va calculer la différence de date dans le format de date fourni. par ex.Calculer la différence de date dans le format donné en PHP4

$date1 = "2011-08-24 10:03:00"; 
$date2 = "2012-09-24 10:04:31"; 
$format1 = "Y W" ; //This format should return the difference in Year and week. 
$format2 = "M D"; // This format should return the difference in Months and days. 
// The format can be any combination of Year,Month,Day,Week,Hour,Minute,Second. 

function ConvertDate($data1,$date2,$format) 

Faites-moi savoir si vous avez besoin de plus de détails. Merci d'avance.

+3

Comme si j'avais vraiment besoin de le dire, mais vous avez vraiment ** besoin ** de mettre à jour votre version de PHP en premier. PHP4 n'a pas été supporté depuis pas mal de temps ... – ircmaxell

+0

oui en fait je suis d'accord avec toi qu'en php5 il y a de bonnes fonctions pour ce truc, mais j'ai besoin de le faire en php4 seulement car je dois aussi supporter php4. – sagar27

Répondre

3

Essayons quelque chose comme ça.

function ConvertDate($date1, $date2, $format) 
{ 
    static $formatDefinitions = array(
     'Y' => 31536000, 
     'M' => 2592000, 
     'W' => 604800, 
     'D' => 86400, 
     'H' => 3600, 
     'i' => 60, 
     's' => 1 
    ); 

    $ts1 = strtotime($date1); 
    $ts2 = strtotime($date2); 
    $delta = abs($ts1 - $ts2); 

    $seconds = array(); 
    foreach ($formatDefinitions as $definition => $divider) { 
     if (false !== strpos($format, $definition)) { 
      $seconds[$definition] = floor($delta/$divider); 
      $delta = $delta % $divider; 
     } 
    } 

    return strtr($format, $seconds); 
} 

Il suffit de garder à l'esprit que les mois et les années seulement estimés parce que vous ne pouvez pas dire « combien de secondes sont un mois » (parce qu'un « mois » peut être comprise entre 28 et 31 jours). Ma fonction compte un mois de 30 jours.

+0

btw Je ne suis pas tout à fait sûr s'il y a des variables statiques dans PHP4. Sinon, il suffit de supprimer le mot-clé statique :) – Andrewsville

+0

PHP dit «Pour la compatibilité avec PHP 4, si aucune déclaration de visibilité n'est utilisée, la propriété ou méthode sera traitée comme si elle était déclarée publique.» – Donovan

+0

Merci pour la réponse. – sagar27

3

Recevez les horodatages Unix de vos dates en utilisant mktime. Alors vous obtenez la différence pour:

$years = floor(($date2-$date1)/31536000); 
$months = floor(($date2-$date1)/2628000); 
$days = floor(($date2-$date1)/86400); 
$hours = floor(($date2-$date1)/3600); 
$minutes = floor(($date2-$date1)/60); 
$seconds = ($date2-$date1); 

Espérons que cela aide.
-Alberto

+0

Merci pour la réponse. – sagar27

Questions connexes