La différence entre deux date en plusieurs formats

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 558 fois - Téléchargée 17 fois

Contenu du snippet

Cette fonction elle permet de retourner la différence entre deux dates en 3 formats

1)un mois (exemple) Mars 2010
2)une période de dd/mm/yyyy à dd/mm/yyyy
3)un jour exemple : Le dd/mm/yyyy

une autre fonction pour le nombre de jour de mois en vérifiant si l'année est bissextiles ou non .

Source / Exemple :


<?php
//Definir deux dates
$d1 = '01/03/2008';
$d2 = '01/03/2009';

//appel de fonction
distance_time($d1,$d2);
/**

  • Retourner une période, un mois ou bien un jour
  • /
function distance_time($from,$to){ $from_d=substr($from,0,2); $from_m=substr($from,3,2); $from_y=substr($from,6,4); $to_d=substr($to,0,2); $to_m=substr($to,3,2); $to_y=substr($to,6,4); $from_time = mktime(0,0,0,$from_m,$from_d,$from_y); $to_time = mktime(0,0,0,$to_m,$to_d,$to_y); //Mois de début $from_day = date('d',$from_time); $from_month = date('m',$from_time); $from_year = date('Y',$from_time); //Date de fin $to_day = date('d',$to_time); $to_month = date('m',$to_time); $to_year = date('Y',$to_time); //calculer le nombre de jours en miunte $dm = $distance_in_minutes = abs(($to_time - $from_time))/60 + 1440 ; //Nombre de jour en minute est > 0 if($dm > 0 ){ //période d'un mois if($dm >= 40320 && $dm <= 44580){ //Test si le même mois dans la même année if($from_month == $to_month && $from_year == $to_year){ //nombre de jours de mois $nb_jours = get_month($from_year,$from_month); if($nb_jours == $to_day){ echo date( "F" , mktime( 0 , 0 , 0 , $to_month ) ) .' '. $to_year; } }else{ echo 'De '.$from_day.'/'.$from_month.'/'.$from_year.' à '.$to_day.'/'.$to_month.'/'.$to_year; } } else if($dm >= 1440 && $dm < 2879){ echo 'Le '.$from_day.'/'.$from_month.'/'.$from_year; } else{ echo 'De '.$from_day.'/'.$from_month.'/'.$from_year.' à '.$to_day.'/'.$to_month.'/'.$to_year; } } } /** *
  • Récuperer le nombre de jours de mois en question
  • /
function get_month($year, $month){ $fev = '28'; //Vérifier si l'année est bissextiles if($month == '02'){ if($year%4 == 0){ $fev = '29'; }else{ $fev = '28'; } } //Enlever le 0 pour les mois < 10 if($month < 10 ){ if(strlen($month) == 2){ $month = substr($month,1,1); } } $mois = array(0,31,$fev,31,30,31,30,31,31,30,31,30,31); return $mois[$month]; } ?>

Conclusion :


la fonction n'est pas trop optimisé.
En cas de besoin merci de la faire.
Merci

A voir également

Ajouter un commentaire Commentaires
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Juste pour dire que la différence de temps entre deux dates est implémentée en natif depuis PHP 5.2.0
http://fr2.php.net/manual/fr/datetime.diff.php

Evidemment, comme cette implémentation est en objet, elle est beaucoup plus souple d'utilisation et permet donc de personnaliser l'affichage comme on l'entend, grâce à la méthode DateInterval::format : http://fr2.php.net/manual/fr/dateinterval.format.php
De même, pour le format en entrée, on peut utiliser n'importe quelle chaîne de caractères reconnue par strtotime()
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
13
Bonjour,

J'aimerais comprendre la finalité de ce code car, si je l'exécute tel qu'il est, celui-ci m'affiche :
De 01/03/2008 à 01/03/2009
ce que je sais déjà puisque ce sont les dates qui sont données en début de code.

Sinon, pour les années bissextiles, pas besoin de chercher midi à quatorze heure, la fonction "date()" sait le faire :
date('L', 'la date') retourne 1 si bissextile sinon 0.
Messages postés
16
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 août 2010

justement, le calcul que tu fais dans cette fonction est faux, ou plutôt incomplet. En effet, savoir si février à 29 jours ne se résume pas à vérifier la division par 4. Il faut également que l'année ne soit pas divisible par 100 ou alors qu'elle le soit par 400.

Ma 2ème question/proposition concernait également ta fonction get_month. Je proposais de la remplacer par l'appel à date("t",mktime(0, 0, 0, $mois, 1, $année)), sous réserve que cette fonction native gère correctement les années bissextiles. Si ce n'est pas le cas, ta fonction (une fois corrigée) fera très bien l'affaire.
Messages postés
10
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
7 avril 2010

Je sais pas si t'as bien vu la fonction get_month($year, $month) dont la quelle je fais un test sur le mois de février
# //Vérifier si l'année est bissextiles
# if($month == '02'){
# if($year%4 == 0){
# $fev = '29';
# }else{
# $fev = '28';
# }
# }

Merci bien
Messages postés
16
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 août 2010

salut,

je voudrais te signaler une erreur dans ton calcul du nombre de jours dans un mois : février aura 29 jours si l'année est divisible par 4 et non par 100 ou si l'année est divisible par 400 (par exemple 2000 l'était mais pas 1900)
De plus, ne peut-on pas utiliser ceci : date("t",mktime(0, 0, 0, $mois, 1, $année)) ? (je sais pas si ça gère comme il faut les années bissextiles)

En tout cas, merci pour ta source.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.