Petites manipulations des dates

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 867 fois - Téléchargée 32 fois

Contenu du snippet

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 / Exemple :


//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.

A voir également

Ajouter un commentaire Commentaires
Messages postés
73
Date d'inscription
lundi 31 mai 2004
Statut
Membre
Dernière intervention
23 février 2007

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 )
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

Pas aml
Messages postés
16
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
17 janvier 2004

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.
Messages postés
16
Date d'inscription
dimanche 10 février 2002
Statut
Membre
Dernière intervention
17 janvier 2004

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.
Messages postés
10
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
12 décembre 2004

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

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.