Différence entre 2 dates & ajout de 2 dates

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 277 fois - Téléchargée 22 fois

Contenu du snippet

Et oui, encore un CODE sur les dates me direz vous...
Mais c'est que je n'ai pas trouvé cela ailleurs, que je l'ai donc réalisé, et donc, que je le post...
Généralité : ces fonctions fonctionnent UNIQUEMENT avec des dates réelles ; si on envoie 2006/15/58 45:99:78, fatalement, on aura une erreur...
Comme je ne suis pas un optimisateur de code, c'est certainement améliorable comme code ^^

Le principe de la différence :
- ENTREE : DateX au format TS (14 caractères AAAAMMJJHHMMSS), DateY même format, Sens (1 pour la soustraction, 0 pour l'addition)
- SORTIE : Date au format TS sur 14 caractères AAAAMMJJHHMMSS
- exemple 1 : quelle date serons nous dans 1 mois, 2 jours, 4 heures et 22 minutes : FonctionDate(20061004114203, 00000102042200, 0)
- exemple 2 : quelle durée entre 2006/11/22 02:33:55 et 2004/02/20 23:55:10 : FonctionDate(20061122023355, 20040220235510, 1)

Fonction bonus : gestion de type d'affichage des dates
- ENTREE : Date au format TS sur 14 caractères AAAAMMJJHHMMSS
- SORTIE : le texte avec la date affichable directement

Source / Exemple :


function F_ModifDate($ref,$delta,$sens)// modifie une date par ajout ou retrait d'une durée variable
    {
	if($ref<$delta){// pour éviter les date négatives, j'inverse les references
		$ref_tpr=$ref;
		$ref_delta=$delta;
		$ref=$ref_delta;
		$delta=$ref_tpr;
		}
	$seconde=substr($ref, 12, 2);
	$minute=substr($ref, 10, 2);
	$heure=substr($ref, 8, 2);
	$jour=substr($ref, 6, 2);
	$mois=substr($ref, 4, 2);
	$an=substr($ref, 0, 4);
	$d_seconde=substr($delta, 12, 2);
	$d_minute=substr($delta, 10, 2);
	$d_heure=substr($delta, 8, 2);
	$d_jour=substr($delta, 6, 2);
	$d_mois=substr($delta, 4, 2);
	$d_an=substr($delta, 0, 4);
	$ref_mois=$d_mois+0;
	$ref_an=$d_an+0;
	if($sens==1){//je retire
		if(($ref_an%4==0 && $ref_an%100!=0) || $ref_an%400==0){$fev=29;}
		else{$fev=28;}
		$calend=array(1=>31,2=>$fev,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31);
		$seconde=$seconde-$d_seconde;
		$minute=$minute-$d_minute;
		$heure=$heure-$d_heure;
		$jour=$jour-$d_jour;
		$mois=$mois-$d_mois;
		$an=$an-$d_an;
		while ($seconde<0){$minute=$minute-1;$seconde=$seconde+60;}
		while ($minute<0){$heure=$heure-1;$minute=$minute+60;}
		while ($heure<0){$jour=$jour-1;$heure=$heure+24;}
		while ($jour<0){
			$jour=$jour+$calend[$ref_mois];
			$mois=$mois-1;
			}
		while($mois<0){
			$an=$an-1;
			$mois=$mois+12;
			}
		}
	else{//j'ajoute
		$seconde=$seconde+$d_seconde;
		$minute=$minute+$d_minute;
		$heure=$heure+$d_heure;
		$jour=$jour+$d_jour;
		$mois=$mois+$d_mois;
		$an=$an+$d_an;
		if(($an%4==0 && $an%100!=0) || $an%400==0){$fev=29;}
		else{$fev=28;}
		$calend=array(1=>31,2=>$fev,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31);
		while ($seconde>59){$minute=$minute+1;$seconde=$seconde-60;}
		while ($minute>59){$heure=$heure+1;$minute=$minute-60;}
		while ($heure>23){$jour=$jour+1;$heure=$heure-24;}
		while ($jour>$calend[$mois]){
			$jour=$jour-$calend[$mois];
			$mois=$mois+1;
			if($mois>12){
				$an=$an+1;
				$mois=$mois-12;
				if(($an%4==0 && $an%100!=0) || $an%400==0){$fev=29;}
				else{$fev=28;}
				$calend=array(1=>31,2=>$fev,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31);
				}
			}
		}
	//gestion du format en 2 et 4 chiffres
	if ($seconde<10) {settype ($seconde, string); $seconde='0'.$seconde;}
	if ($minute<10) {settype ($minute, string); $minute='0'.$minute;}
	if ($heure<10) {settype ($heure, string); $heure='0'.$heure;}
	if ($jour<10) {settype ($jour, string); $jour='0'.$jour;}
	if ($mois<10) {settype ($mois, string); $mois='0'.$mois;}
	if ($an<10) {settype ($an, string); $an='000'.$an;}
	elseif ($an<100) {settype ($an, string); $an='00'.$an;}
	elseif ($an<1000) {settype ($an, string); $an='0'.$an;}
	$date_ref=$an.$mois.$jour.$heure.$minute.$seconde;
	return ($date_ref);
	}

function F_Timestamp2Date($type, $chaine)
        {
		$seconde=substr($chaine, 12, 2);
		$minute=substr($chaine, 10, 2);
		$heure=substr($chaine, 8, 2);
		$jour=substr($chaine, 6, 2);
		$mois=substr($chaine, 4, 2);
		$an=substr($chaine, 0, 4);
		if($type==0){$datation=array($an, $mois, $jour, $heure, $minute, $seconde);}//type 0 pour le stockage
		elseif($type==1){//type 1 pour l'affichage raccourci
			if (trim($an)=='' || trim($an)==0){}
			else{
				while(substr($an,0,1)==0){$an=substr($an,1);}
				$datation=$jour.'/'.$mois.'/'.$an.', vers '.$heure.' heures';
				}
			}
		elseif($type==2){//type 2 pour l'affichage exact
			if (trim($an)=='' || trim($an)==0){}
			else{
				while(substr($an,0,1)==0){$an=substr($an,1);}
				$datation=$an.'/'.$mois.'/'.$jour.',  '.$heure.':'.$minute.':'.$seconde;
				}
			}
		elseif($type==3){//type 3 pour le delta
			$datation="";
			if($an!=0){$datation=$datation.$an.' an ';}
			if($mois!=0){$datation=$datation.$mois.' m. ';}
			if($jour!=0){$datation=$datation.$jour.' j. ';}
			if($heure!=0){$datation=$datation.$heure.' h. ';}
			if($minute!=0){$datation=$datation.$minute.' min. ';}
			if($seconde!=0){$datation=$datation.' et des poussières';}
			}
		elseif($type==4){//type 4 pour l'affichage super raccourci "triable" en tableau
			if (trim($an)=='' || trim($an)==0){}
			else{
				while(substr($an,0,1)==0){$an=substr($an,1);}
				$datation=$an.'/'.$mois.'/'.$jour;
				}
			}
		return ($datation);
		}

Conclusion :


Limite de la fonction :
Fonctionne avec les dates 'modernes' uniquement, puisque je ne traite pas les aspects des modification des calendriers Grégorien, ni Julien

A voir également

Ajouter un commentaire

Commentaires

FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
Ola ! J'ai failli avoir une attaque cérébrale lol !
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Nan, y a des trucs qui peuvent être intéressants dedans.
Et c'est du prémâché que certains préfèreront peut-être utiliser, plutôt que mon exemple.
Donc, cette source reste.
cs_Tartuffe
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
2 -
Avantage de ma solution, hors d'avoir ré-inventé la roue, c'est que la dates retournées ne sont pas en seconde à partir de TpsUnix ou autre, mais est un TS, dont le format peu être modifié...

Tartuffe, qu'aime pas les dates, ni les histoires de généalogie d'ailleurs...

PS : On supprime le source donc ?
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Mais c'était bien tenté ;-)
cs_Tartuffe
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
2 -
MdR...
Je savais bien que les dates et moi, Bof, Bof...

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.