begin process at 2012 02 13 08:32:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > DIFFÉRENCE ENTRE DEUX DATE (LISTE RÉCUPÉRÉE DANS UN TABLEAU)

DIFFÉRENCE ENTRE DEUX DATE (LISTE RÉCUPÉRÉE DANS UN TABLEAU)


 Information sur la source

Note :
Aucune note
Catégorie :Date / Heure Classé sous :date, mois, liste, tableau Niveau :Débutant Date de création :24/02/2006 Date de mise à jour :01/03/2006 07:42:58 Vu :14 292

Auteur : devinekisai

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

 Description

Salut les codeurs fou !
Je développe actuellement une petite appli pour faire mes comptes, et j'en suis aux virements mensuels.
J'ai cherché un moments une fonction permettant de récupérer un tableau de liste de date fixe résultants d'une différence entre deux dates.
Ne trouvant rien sur le sujet ,j'ai fini par m'en faire une.
On ne sais jamais, ca peux toujours servir à quelqu'un... La preuve.
Voici donc la fonction:

Source

  • <?php
  • function liste_mois($date_debut, $date_fin) {
  • $date_suite = array();
  • //on flingue les tirets des dates
  • list($jour1, $mois1, $annee1) = explode("-", $date_debut);
  • list($jour2, $mois2, $annee2) = explode("-", $date_fin);
  • //on récupère le nombre de mois entre les deux dates
  • $nombre_mois = (($annee2 - $annee1)*12 + ($mois2 - $mois1));
  • //on incrémente chaque mois depuis la date début jusquà la date fin
  • for($i = 0; $i < $nombre_mois; $i++){
  • $mois = ($mois1 + $i);
  • //comptage du nombre de jour dans le mois +$i
  • $jour = date("j", mktime(0, 0, 0, $mois+1, 0, $annee1));
  • //si le nombre de jour du mois +$i < au jour de la date fixée
  • if($jour < $jour1){
  • //on mets le dernier jour du mois +$i
  • $date = date('d-m-Y', (mktime(0, 0, 0, $mois, $jour, $annee1)));
  • }else{
  • //sinon on traite la meme date du mois +$i
  • $date = date('d-m-Y', (mktime(0, 0, 0, $mois, $jour1, $annee1)));
  • }
  • $date_suite[] = $date;
  • }
  • return $date_suite;
  • }
  • print_r(liste_mois('31-12-2005','15-08-2006'));
  • ?>
<?php
function liste_mois($date_debut, $date_fin) {
        $date_suite = array();
	//on flingue les tirets des dates
	list($jour1, $mois1, $annee1) = explode("-", $date_debut);
	list($jour2, $mois2, $annee2) = explode("-", $date_fin);
	//on récupère le nombre de mois entre les deux dates
	$nombre_mois = (($annee2 - $annee1)*12 + ($mois2 - $mois1));
	//on incrémente chaque mois depuis la date début jusquà la date fin
	for($i = 0; $i < $nombre_mois; $i++){
		$mois = ($mois1 + $i);
		//comptage du nombre de jour dans le mois +$i
		$jour = date("j", mktime(0, 0, 0, $mois+1, 0, $annee1));
		//si le nombre de jour du mois +$i < au jour de la date fixée
		if($jour < $jour1){
		//on mets le dernier jour du mois +$i
			$date = date('d-m-Y', (mktime(0, 0, 0, $mois, $jour, $annee1)));
		}else{
		//sinon on traite la meme date du mois +$i
			$date = date('d-m-Y', (mktime(0, 0, 0, $mois, $jour1, $annee1)));
		}
		$date_suite[] = $date;
	}
	return $date_suite;
}
print_r(liste_mois('31-12-2005','15-08-2006'));
?>

 Conclusion

Au résultat, ca donne ce qui suit :
Array ( [0] => 23-02-2006 [1] => 23-03-2006 [2] => 23-04-2006 [3] => 23-05-2006 [4] => 23-06-2006 [5] => 23-07-2006 [6] => 23-08-2006 [7] => 23-09-2006 [8] => 23-10-2006 [9] => 23-11-2006 [10] => 23-12-2006 [11] => 23-01-2007 [12] => 23-02-2007 [13] => 23-03-2007 [14] => 23-04-2007 [15] => 23-05-2007 [16] => 23-06-2007 [17] => 23-07-2007 [18] => 23-08-2007 [19] => 23-09-2007 )

Toutes critiques constructives sont les bienvenues.


 Historique

24 février 2006 13:38:58 :
Mise à jour pour prendre en compte les dates de fin de mois plus cohérentes. A tester ...
01 mars 2006 07:42:59 :
mise à jour, merci f6xara.

 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

DIFFÉRENCE ENTRE DEUX DATE EN JOURS (LISTE RÉCUPÉRÉE DANS UN... par DevilTN
Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
UNE LISTE DÉROULANTE AVEC LES DATES. par ffwrude
Source avec Zip Source avec une capture CALENDRIER - FLOPTWO par floptwo
Source avec une capture CALENDRIER DU MOIS EN COURS par pleymo63

Commentaires et avis

Commentaire de malalam le 24/02/2006 10:02:52 administrateur CS

Hello,

ce code a un soucis : il ne sort pas forcément des dates valides.

Deux exemples :
si je donne comme dates d'entrée : 30/12/2005 et 15/08/2006, il va me sortir le 30/02/2006, date qui n'existe pas.
De même, si je rentre le 31/12/2005 au 15/08/2010, il va me sortir beaucoup de dates n'existant pas.
Puisque ce code est utilisé pour faire tes comptes, tu devrais y réflêchir, parce que tu vas avoir un décalage avec ta banque ;-)

Il sera intéressant que tu mettes à jour ce code avec les modifications qui s'imposent, d'ailleurs :-)
Voire que tu permettes dans la fonction de choisir l'écart souhaité entre les dates entrées, parce que là, c'est un peu limitatif.

Commentaire de devinekisai le 24/02/2006 12:39:55

Oups !!
Bien vu.
Mais ce qui est étonnant c'est de voir que je n'ai aucune date incohérante concernant tes exemples.
exemple entre 30-12-2005 et 15-08-2006 :
Array ( [0] => 30-12-2005 [1] => 30-01-2006 [2] => 02-03-2006 [3] => 30-03-2006 [4] => 30-04-2006 [5] => 30-05-2006 [6] => 30-06-2006 [7] => 30-07-2006 )
Est-ce la configuration du serveur qui agit sur les dates ???

Mais il est vrai que je vais plancher sur la détection du nombre de jour dans le mois pour rendre les virements plus cohérants.
Merci de la remarque MALALAM.

Commentaire de malalam le 24/02/2006 12:51:11 administrateur CS

Non, c'est le mktime () qui crée la date. Et lui connait les dates :-)
Donc ce que je t'ai dit n'était pas correct : les dates seront valides, effectivement.
Par contre l'écart est imprévisible...enfin si, il l'est...plus exactement : il va varier. Et ce parce que tu te bases toujours sur le 1er jour donné en argument, ton écart ne sera donc pas constant.
Mais ça, c'est peut-être ce qu'il te faut :-)

Néanmoins, je pense sincèrement que cette fonction devrait être plus complète, avec un écart de jours donné, voire de mois, ou de semaines ? Et peut-être penser aux jours non ouvrés. De même, justement, concernant cet écart, laisser l'opportunité de modifier la règle de fonctionnement. Ici, on passe au mois suivant : est-ce souhaitable ? Dans le cadre de comptes, je ne suis pas sûr que sauter le mois de février soit une bonne chose ;-)

Commentaire de devinekisai le 24/02/2006 13:43:07

Je viens de tester la dernière mise à jour mais pas complètement.
Voici un premier jet de résultat :
Array ( [0] => 31-12-2005 [1] => 31-01-2006 [2] => 28-02-2006 [3] => 31-03-2006 [4] => 30-04-2006 [5] => 31-05-2006 [6] => 30-06-2006 [7] => 31-07-2006 )
Je reprendrais le code plus tard pour étaler les dates sur les semaines, voir du bimensuel, trimestriel, semetriel...

Commentaire de f6xara le 27/02/2006 09:58:53

Tu devrais aussi définir ta variable de retour au début de ta fonction : $date_suite = array(); car si le choix des dates est dynamique, tu peux te retrouver avec une date de début et une date de fin dans le meme mois, et dans ce cas la, on entre pas dans la boucle et donc date_suite est indéfini

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tri tableau 2 dimensions [ par lebobby ] Bonjour je voudrais savoir comment je pourrais faire pour trier ce tableau :$tab[0]=array("i"=&gt;"23", "c" =&gt; "rge", "date" =&gt;'2002-08-03 12:00 Date et zone de liste [ par Joez ] Bonjour voila j'ai 3 listes déroulantes- 1 avec les jours ( 1 2 3 4 .... 31)- 1 avec les mois ( Janvier ..... decembre )- 1 avec les années ( 2002, 20 ¡¡¡ A l'aide ¡¡¡ [ par Xime ] salut,je vous explique mon prob g un formulaire assez simple qui contient deux zonnes de listes (la deuxieme est liée a la premiere) donc o debut g fa deffirence entre deux date (ans, mois, semaines, jour) [ par apz ] salut,dans une zone membre je veux affiche des dates recuperer depuis un champs DATETIME d'un enregistrement.dans ce champ je sauvegarde la derniere d prob avec des listes deroulantes [ par toto99 ] voila mon prob est le suivante:-------------------------------------------j'ai une premiere liste deroulante qui ce remplit directement par raport a m boucle [ par toto99 ] voila je recupe des dates dans une liste deroulante suvant un choix qui ce trouve dans une autre liste deroulante, tous les deux sont alimenter par un Afficher une date [ par iomega ] Bonjour à tous je voudrai savoir comment faire pour afficher dans une variable le mois suivant du mois courant c'est-à-dire actuellement on est le moi Liste déroulante en php [ par iomega ] Bonjour à tous!!!J'ai une liste déroulant ou je séléctionne une dateavec un form action et lorsque je sélectionne cette date le problème c'est que cel 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 Date d'il y a un mois [ par kimengumi ] Salut tout le monde !J'ai un problème qui me retourne la tête, j'essaye de trouver la date d'il y a un mois par rapport à une date donnée.C'est à dire


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,418 sec (3)

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