begin process at 2012 05 27 17:53:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > PETITES MANIPULATIONS DES DATES

PETITES MANIPULATIONS DES DATES


 Information sur la source

Note :
4 / 10 - par 3 personnes
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date / Heure Niveau :Débutant Date de création :29/05/2002 Date de mise à jour :29/05/2002 18:57:50 Vu :5 088

Auteur : tafiscobar

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

 Description

eh ben, j'ai fait une recherche tout a l'heure sur les manips des dates et j'ai rien vu, alors je me suis mis a faire 3 fct qui manipulent des dates, c'est simple mais bon, cela p aider certains pour comparer des dates et obtenir le nombre de jour entre les deux ou avoir une date plus des jours si on ne sait pas a l'avance c q cel ava donner, bon vous verrez bien.

Source

  • //fonction qui prend en parametre une annee et qui retourne vrai si bissextile
  • //faux sinon, une annee est bissextille si( annee/ 1000 = 0)
  • //ou (annee/4 = 0 et annee/ 100 <> 0)
  • function bissextile($annee){
  • if(($annee%4==0 && $annee%100 != 0) || ($annee %1000==0))
  • return true;
  • else
  • return false;
  • }
  • //cette fonction renvoie une date en jour
  • //reçoit en parametre une date, c'est pour comparer par exemle 2 dates, j'ai pas trouver
  • //mieux que de les convertir en jour et de les comparer apres et comme cela, je sais
  • //directement le nombre de jours entre les 2 dates
  • function RetournerJour($DATE,$separator="-"){
  • $jour = 3600*24;//nombre de secondes en une journee
  • $result = explode($separator,$DATE); //le divise en jour,mois, annee
  • $retour = gmmktime(0,0,0,$result[1],$result[2],$result[0]);//le donne en seconde
  • $retour = $retour/$jour;//le donne en jour
  • $retour = intval($retour); //le convertit en entier
  • return $retour; //le retourne
  • }
  • function DatePlus($DATE,$nbjours){
  • $tmp = explode("-",$DATE); //je le divise suivant le caractere "-"
  • $tmp[0] = intval($tmp[0]);
  • $tmp[1] = intval($tmp[1]);
  • $tmp[2] = intval($tmp[2]);
  • switch($tmp[1]){
  • case 1:
  • case 3:
  • case 5:
  • case 7:
  • case 8:
  • case 10:
  • case 12:
  • $fin = 31; //cette varaible c'est pour savoir le nombre de jours du mois
  • break;
  • case 2:
  • if(bissextile($tmp[0])==true) // la c'est bissextile, cf la fct bissextile plus haut
  • $fin = 29;
  • else
  • $fin = 28;
  • break;
  • case 4:
  • case 6:
  • case 9:
  • case 11:
  • $fin = 30;
  • break;
  • }
  • if(($tmp[2]+$nbjours)<=$fin)
  • $tmp[2] += $nbjours; //la, la somme est inferieure au nombre de jours du mois
  • //donc on p juste incrmenter le nb jours de $nbjours en parametre
  • else{//ici non, on enleve le nombre de jours correspondant et puis on passe au mois suivant
  • //pour le mettre au nombre de jour qui reste
  • $tmp[2] = $nbjours - ($fin - $tmp[2]);
  • if($tmp[1] !=12) //comme on est en fin de mois, on regarde si c'est mois de dembre ou non
  • $tmp[1] ++; // pas mois de decembre, alors on passe juste au mois suivant, en incrementtant
  • else{ //mois de decmbre
  • $tmp[1] = 1; //le mois prochain devient janvier
  • $tmp[0] ++; //l'annee prochaine devient l'annee en cours + 1
  • }
  • }
  • //$jdc = gregorianToJd($tmp[1],$tmp[2],$tmp[0]);
  • //print(jdtogregorian($jdc));
  • //on va le retourner en chaine et pour cela, on les transforme en chaine les jours,mois,ans
  • for($i=0;$i<=2;$i++)
  • $tmp[$i] = strval($tmp[$i]);
  • //ensuite on verifie les jours et les mois avec un caractere pour les mettre
  • //en 2 caracteres conformement au mysql
  • if(strlen($tmp[1])==1)
  • $tmp[1] = "0" . $tmp[1];
  • if(strlen($tmp[2])==1)
  • $tmp[2] = "0" . $tmp[2];
  • //pour les années, on regarde suivant que ce soit 1,2,3caracteres,on ajoute
  • //le nombre de 0 avant pour que la longueur soit egale a 4 conforme a mysql
  • if(strlen($tmp[0])==1)
  • $tmp[0] = "000" . $tmp[0];
  • if(strlen($tmp[0])==2)
  • $tmp[0] = "00" . $tmp[0];
  • if(strlen($tmp[0])==3)
  • $tmp[0] = "0" . $tmp[0];
  • //la on concatene ce q'on a pour renvoyer la date voulue
  • //ici je l'ai mis suivant ce q met mysql
  • $chaine = $tmp[0] . "-" . $tmp[1] . "-" . $tmp[2] ;
  • return $chaine;
  • }
//fonction qui prend en parametre une annee et qui retourne vrai si bissextile 
//faux sinon, une annee est bissextille si( annee/ 1000 = 0) 
//ou (annee/4 = 0 et annee/ 100 <> 0)
function bissextile($annee){
               if(($annee%4==0 && $annee%100 != 0) || ($annee %1000==0))
		return true;
	else
		return false;
}

//cette fonction renvoie une date en jour
//reçoit en parametre une date, c'est pour comparer par exemle 2 dates, j'ai pas trouver 
//mieux que de les convertir en jour et de les comparer apres et comme cela, je sais 
//directement le nombre de jours entre les 2 dates
function RetournerJour($DATE,$separator="-"){
$jour = 3600*24;//nombre de secondes en une journee
$result = explode($separator,$DATE); //le divise en jour,mois, annee
$retour = gmmktime(0,0,0,$result[1],$result[2],$result[0]);//le donne en seconde
$retour = $retour/$jour;//le donne en jour

$retour = intval($retour); //le convertit en entier

return $retour; //le retourne
}

function DatePlus($DATE,$nbjours){
	$tmp = explode("-",$DATE); //je le divise suivant le caractere "-"
	$tmp[0] = intval($tmp[0]);
	$tmp[1] = intval($tmp[1]);
	$tmp[2] = intval($tmp[2]);
	
	switch($tmp[1]){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			$fin = 31;	//cette varaible c'est pour savoir le nombre de jours du mois
			break;
		case 2:
			if(bissextile($tmp[0])==true) // la c'est bissextile, cf la fct bissextile plus haut
				$fin = 29;
			else
				$fin = 28;  
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			$fin = 30;
			break;
	}
	
	if(($tmp[2]+$nbjours)<=$fin)
		$tmp[2] += $nbjours; //la, la somme est inferieure au nombre de jours du mois
							//donc on p juste incrmenter le nb jours de $nbjours en parametre
	else{//ici non, on enleve le nombre de jours correspondant et puis on passe au mois suivant
		//pour le mettre au nombre de jour qui reste
		$tmp[2] = $nbjours - ($fin - $tmp[2]);
		if($tmp[1] !=12) //comme on est en fin de mois, on regarde si c'est mois de dembre ou non
			$tmp[1] ++; // pas mois de decembre, alors on passe juste au mois suivant, en incrementtant 
		else{ //mois de decmbre
			$tmp[1] = 1; //le mois prochain devient janvier 
			$tmp[0] ++; //l'annee prochaine devient l'annee en cours + 1
		}  
	}
	
	//$jdc = gregorianToJd($tmp[1],$tmp[2],$tmp[0]);
	//print(jdtogregorian($jdc));
	
	//on va le retourner en chaine et pour cela, on les transforme en chaine les jours,mois,ans
	for($i=0;$i<=2;$i++)
		$tmp[$i] = strval($tmp[$i]);
		
	//ensuite on verifie les jours et les mois avec un caractere pour les mettre 
	//en 2 caracteres conformement au mysql
	if(strlen($tmp[1])==1)
		$tmp[1] = "0" . $tmp[1];
	if(strlen($tmp[2])==1)
		$tmp[2] = "0" . $tmp[2];
		
	//pour les années, on regarde suivant que ce soit 1,2,3caracteres,on ajoute
	//le nombre de 0 avant pour que la longueur soit egale a 4 conforme a mysql 
	if(strlen($tmp[0])==1)
		$tmp[0] = "000" . $tmp[0];
	if(strlen($tmp[0])==2)
		$tmp[0] = "00" . $tmp[0];
	if(strlen($tmp[0])==3)
		$tmp[0] = "0" . $tmp[0];
	
	//la on concatene ce q'on a pour renvoyer la date voulue
	//ici je l'ai mis suivant ce q met mysql
	$chaine = $tmp[0] . "-" . $tmp[1] . "-" . $tmp[2] ;
	
	return $chaine;
	
}

 Conclusion

bon, je pense q cela aide, sinon supprimer le c'est tout, je n'ai pas remarque de bug par contre vous pouvez le modifier comme vous voulez.Il se p aussi que des erreurs s'y st introduits par maladresse.


 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

Commentaires et avis

Commentaire de BastGau le 30/05/2002 01:00:53

Oui c'est pas mal et sympatique. Toujours bien les dates pour apprendre, je l'avais fait avec la notion d'objet en PHP ... ;o)

J'aurai opté pour des tableaux plutot que des "case" pour le nombre de jour dans le mois ... Le seul trucque je comprend pas mais j'ai pas examiné a fond, c'st si j'ajoute 100 jours a ma date, va-t-il me rendre la bonne date ? Je ne vois pas de boucle "while" ou "for" pour résoudre cela ... BastGau

Commentaire de tafiscobar le 30/05/2002 16:25:52

tu sais, un tableau c'est toujours a charger en memoire et donc de la place or un switch( comme son nom l'indique c'est suivant), donc il n'ya pas a "devorer" de l'espace memoire pour rien, c'est un test, si par contre, j'avais plusieurs cas differents, la je pense q oui, un tableau ne serait pas mal,neanmoins, c'est un choix de programmeur.

Commentaire de tafiscobar le 30/05/2002 16:26:03

tu sais, un tableau c'est toujours a charger en memoire et donc de la place or un switch( comme son nom l'indique c'est suivant), donc il n'ya pas a "devorer" de l'espace memoire pour rien, c'est un test, si par contre, j'avais plusieurs cas differents, la je pense q oui, un tableau ne serait pas mal,neanmoins, c'est un choix de programmeur.

Commentaire de yoman64 le 12/06/2002 19:27:39

Pas aml

Commentaire de RedFo1 le 14/06/2004 12:54:52

salut,

pour les années bissextiles : je crois qu'une année est bissextile si c'est un multiple de 4 et pas un multiple de 100 ou si c'est un multiple de 400 :
if(($annee%4==0 && $annee%100!=0) || $annee%400==0){$bissextile=1;}
(vérifié ici : http://forums.futura-sciences.com/showthread.php?t=7113 )

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,655 sec (3)

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