Différence entre 2 dates & ajout de 2 dates

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

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.