begin process at 2012 05 27 19:54:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > LA DIFFÉRENCE ENTRE DEUX DATE EN PLUSIEURS FORMATS

LA DIFFÉRENCE ENTRE DEUX DATE EN PLUSIEURS FORMATS


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :dates, formats, mois, php, plusieurs Niveau :Initié Date de création :06/04/2010 Date de mise à jour :06/04/2010 17:05:03 Vu :2 768

Auteur : nasro81

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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];
  • }
  • ?>
<?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


 Historique

06 avril 2010 17:05:03 :
deux lignes de test à supprimer

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
REDIMENSIONNEMENT D'IMAGE PHP par JStevens
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
SCRIPT PERMETTANT DE MODIFIER UN DATE AU FORMAT AMÉRICAIN VE... par CraMiX

Commentaires et avis

Commentaire de biboux le 07/04/2010 18:03:54

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.

Commentaire de nasro81 le 07/04/2010 20:17:08

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

Commentaire de biboux le 07/04/2010 22:52:09

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.

Commentaire de jeca le 08/04/2010 09:30:32

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.

Commentaire de neigedhiver le 09/04/2010 20:46:01

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Date du lendemain en PHP [ par kimengumi ] Salut à tous,Je viens d'être confronté à un chtit problème, c'est d'afficher la date du lendemain en PHPVous allez me dire qu'il suffit de faire un da Gestion de dates [ par tryoruda ] SalutJe souhaite quelques tuyaux pour gérer les dates :- un formulaire avec choix du jour / du mois / de l'année envoie vers un seul champ Mysql date- Addition sur dates... [ par sn0wb0ard3r ] Bonjour à tous...Voila, je monte un site sur lequel je propose un service paiement, utilisable dans un certaine durée de temps...Je voudrais juste sav les dates, calcule de jour [ par aquewel ] Bonjour,un petit probleme je voudrais programmer une date futur dans le temps tous les premier Mercredi du mois d'aout tous les ans !J'ai reussi qu'a classement par dates [ par hdh ] Hello, C'est une demande de conseils car je ne sais comment proc&#233;der : J'ai un tableau dans lequel j'affiche des maintenances (son nom, son conte Additionner un mois d'une date [ par albimver ] Bonjour, je d&#233;veloppe actuellement sous PHP j'aimerais que &#224; partir d'une date exmple date location ajouter 3 (pour mois) afin qu'il me donn Calcul de dates [ par aulo ] &nbsp;&nbsp;&nbsp; Bonjour, Je suis en train de remettre au gout du jour un vieux classeur excel (avec plein de vieilles fonction tr&#232;s lourdes) e Classer des dates de concerts mois par mois [ par gets7 ] hello,je dois faire un site pour mon groupe de musique et du coup me suis mis au php, pour le moment j'affiche les dates de concerts ainsi 28/03 Je Mois entre 2 dates [ par thunderfear ] Bonjour,J'aimerai savoir les mois entre 2 dates. Par exemple du 01/07/2006 jusqua maintenant 01/10/2006 j'aimerai qu'une fonction affiche:07/200608/20 manipulation date php/access [ par nildv ] Bonjour tout le monde,J'ai un petit probleme pour manipuler les dates.J'ai dans une table access des dates que j 'exploite avec php, quand je fais:ech


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales