déterminer la date suivante

Petit nouveau ! | 3 Messages

03 juil. 2009, 10:17

bonjour a tous j'ai un petit souci j'aimerai savoir s'il y a une funtion qui me permet de trouver la date suivante a une date donnée.
merci :?:

Eléphant du PHP | 245 Messages

03 juil. 2009, 11:55

je n'en connais pas de toute faite, mais c'est pas si compliqué d'en construire.
Cela dépend aussi du format de date que tu souhaites utilisé.
Pour ma part j'utilise souvent le format "20090703" en chaine de caractere, je le trouve assez simple à manipuler.
Enfin bon si ça se trouve, il y en a.
Mais je ne les connais pas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 juil. 2009, 11:59

Bonjour,

Regarde du côté de la fonction mktime()
http://fr.php.net/mktime
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

03 juil. 2009, 13:39

merci de vouloir m'aider
au fait mon problème est de parcourir les dates entre deux paramètres renseignés
$datedebut ; $datefin

//mon souci est de parcourir toutes les dates entre $datedebut et $datefin enfin d'exécuter une requete
$date_suivante=$datedebut
while($date_suivante!=$datefin){
//jexécute ma requete
$date_suivante=mafunctiondatesuivante($date_suivante)
}

tout ce qui me manque c'est ma fonction: mafunctiondatesuivante()
si quelqu'un a une idée de comment trouver la date suivante en fonction d'une date donnée cela m'aidera beaucoup.
Modifié en dernier par donluxes le 03 juil. 2009, 19:13, modifié 1 fois.

Mammouth du PHP | 965 Messages

03 juil. 2009, 14:36

Tu devrais trouver ton bonheur dans ce code, bien sur c'est plus développer, trouver la date suivante mais pas un week end, pas un jour férié etc avec un report selon les jours +n jours pour le jour suivant de tel ou tel jour.

Mais avec ça ta déjà de quoi faire ce que tu veux.

//Fonction donner heure et jour de levée d'option
function Date_Levee_Option($Date_Enregistree)
{	
	/* Decoupage de la date */
	$Annee_Enregistre_Chiffre = substr($Date_Enregistree, 0, 4);
	$Mois_Enregistre_Chiffre  = substr($Date_Enregistree, 5, 2);
	$Jour_Enregistre_Chiffre  = substr($Date_Enregistree, 8, 2);
	$Heure_Enregistree        = substr($Date_Enregistree, 11, 2);
	$Minutes_Enregistree      = substr($Date_Enregistree, 14, 2);
	$Secondes_Enregistrees    = substr($Date_Enregistree, 17, 2);
	$Jour_Enregistre          = getJour($Date_Enregistree);

  $dateAvecOption = finAbonnement($Jour_Enregistre_Chiffre,$Mois_Enregistre_Chiffre,$Annee_Enregistre_Chiffre,ajouterJourOption($Jour_Enregistre));
  $explodeDate    = explode('-',$dateAvecOption);
  
  $Jour_Enregistre_Chiffre  = $explodeDate[2];
  $Mois_Enregistre_Chiffre  = $explodeDate[1];
  $Annee_Enregistre_Chiffre = $explodeDate[0];
  
	// Si jour ferié reporter au lendemain
	while(!est1JourOuvrable($Jour_Enregistre_Chiffre, $Mois_Enregistre_Chiffre, $Annee_Enregistre_Chiffre))
	{
    $dateAvecOption = finAbonnement($Jour_Enregistre_Chiffre,$Mois_Enregistre_Chiffre,$Annee_Enregistre_Chiffre,1);
		$explodeDate    = explode('-',$dateAvecOption);
  
    $Jour_Enregistre_Chiffre  = $explodeDate[2];
    $Mois_Enregistre_Chiffre  = $explodeDate[1];
    $Annee_Enregistre_Chiffre = $explodeDate[0];
    
		// Si la nouvelle date est un week end on reporte au lundi 
		$nouveauJour = getJour($Annee_Enregistre_Chiffre."-".$Mois_Enregistre_Chiffre."-".$Jour_Enregistre_Chiffre); 
		if($nouveauJour == 6 || $nouveauJour == 0) $Jour_Enregistre_Chiffre = $Jour_Enregistre_Chiffre + ajouterJourOption($nouveauJour);
	}
	
	// Calcul de l'heure mise à jour
	$jourFinal = getJour($Annee_Enregistre_Chiffre."-".$Mois_Enregistre_Chiffre."-".$Jour_Enregistre_Chiffre);
	
	if($jourFinal == 1)
	{
    if($Heure_Enregistree <= 12) {
		  $Heure = "12:00:00";
	  }
	  else {
		  $Heure = $Heure_Enregistree.":".$Minutes_Enregistree.":".$Secondes_Enregistrees;
	  }
	}
	else
	{
		$Heure = date('H:i:s');
	}	
	
	((int)$Jour_Enregistre_Chiffre < 10) ? $j = "0".$Jour_Enregistre_Chiffre : $j = $Jour_Enregistre_Chiffre;
	((int)$Mois_Enregistre_Chiffre < 10) ? $m = "0".$Mois_Enregistre_Chiffre : $m = $Mois_Enregistre_Chiffre;
	
	return $Date_Enregistrement = $Annee_Enregistre_Chiffre."-".$m."-".$j." ".$Heure;
}

// Calcul de l'ajour du nombre de jour
function ajouterJourOption($jour)
{
	switch($jour)
	{
		case 1:
		$Jour_MAJ = 3;
		break;
	
		case 2:
		$Jour_MAJ = 3;
		break;
	
		case 3:
		$Jour_MAJ = 5;
		break;
		
		case 4:
		$Jour_MAJ = 4;
		break;
	
		case 5:
		$Jour_MAJ = 4;
		break;
	
		case 6:
		$Jour_MAJ = 2;
		break;
	
		case 0:
		$Jour_MAJ = 1;
		break;
	}
	return $Jour_MAJ;
}

function getJour($date)
{
	$timestamp = strtotime($date);
	$jour      = date('w',$timestamp);
					 
	return $jour;					 
}

function est1JourOuvrable($jour, $mois, $annee, $alsace=false){
	$estFerier = false;
	
	// calcul des jours feries pour un seul mois.
	if (mktime(12,0,0,(int)$mois,(int)$jour,(int)$annee) == -1) { return false; }
	list($mois, $annee) = explode('-', date('m-Y', mktime(12,0,0,(int)$mois, 1, (int)$annee)));
	$annee = intval($annee);
	$mois = intval($mois);
	
	// une constante
	$jourEnSecondes = 3600*24;
	
	// les jours fixes
	$ferie['Jour de l\'An'][1] = 1;
	$ferie['Armistice 1939-1945'][5] = 8;
	$ferie['Toussaint'][11] = 1;

	$ferie['Armistice 1914-1918'][11] = 11;
	$ferie['Assomption'][8] = 15;
	$ferie['Fête du travail '][5] = 1;
	$ferie['Fête nationale française'][7] = 14;
	$ferie['Noël'][12] = 25;
	
	// quelques fetes mobiles
	$lundi_de_paques['mois'] = date( 'n', easter_date($annee)+1*$jourEnSecondes);
	$lundi_de_paques['jour'] = date( 'j', easter_date($annee)+1*$jourEnSecondes);
	$lundi_de_paques['nom']  = 'Lundi de Pâques';
	

	$ascencion['mois'] = date( 'n', easter_date($annee)+39*$jourEnSecondes);
	$ascencion['jour'] = date( 'j', easter_date($annee)+39*$jourEnSecondes);
	$ascencion['nom']  = 'Jeudi de l\'Ascenscion';
	
  /*
	$vendredi_saint['mois'] = date( 'n', easter_date($an)-2*$jourEnSecondes);
	$vendredi_saint['jour'] = date( 'j', easter_date($an)-2*$jourEnSecondes);
	$vendredi_saint['nom'] = 'Vendredi Saint';
  */

	$lundi_de_pentecote['mois'] = date( 'n', easter_date($annee)+50*$jourEnSecondes);
	$lundi_de_pentecote['jour'] = date( 'j', easter_date($annee)+50*$jourEnSecondes);
	$lundi_de_pentecote['nom'] = 'Lundi de Pentecôte';
	
	$ferie[$lundi_de_paques['nom']][$lundi_de_paques['mois']] = $lundi_de_paques['jour'];
	$ferie[$lundi_de_pentecote['nom']][$lundi_de_pentecote['mois']] = $lundi_de_pentecote['jour'];
	$ferie[$ascencion['nom']][$ascencion['mois']] = $ascencion['jour'];
//    if ($alsace) $ferie[$vendredi_saint['nom'].' (Alsace)'][$vendredi_saint['mois']]= $vendredi_saint['jour'];

	// reponse
	while( list($nom, $date)=each($ferie) ){
			if ( $date[$mois]==$jour ){
					$estFerier = true;
			}
	}
	
	//test jour ouvrable oui/non
	return !( $estFerier );
}

function dateSuivante($jour, $mois, $annee, $sep='/')
{
	$jour = (int)$jour;
	$mois = (int)$mois;
	$annee = (int)$annee;
	
	if(!checkdate($mois,$jour,$annee)) return false;
	if(checkdate($mois,($jour+1),$annee))		return ($jour+1).$sep.$mois.$sep.$annee;
	if(checkdate($mois+1,1,$annee))					return '1'.$sep.($mois+1).$sep.$annee;
	if(checkdate(1,1,$annee+1))							return '1'.$sep.'1'.$sep.($annee+1);
}

function finAbonnement($jourDeb, $moisDeb, $anneeDeb, $nbJours)
{

	if(!checkdate($moisDeb, $jourDeb, $anneeDeb)) return false;
	$jourFinAbo = $jourDeb;
	$moisFinAbo = $moisDeb;
	$anneeFinAbo = $anneeDeb;
	
	for($i=1; $i<=$nbJours; $i++){
		$dateS = dateSuivante($jourFinAbo,$moisFinAbo,$anneeFinAbo);
		$tmp = explode('/', $dateS);
		
		$jourFinAbo = $tmp[0];
		$moisFinAbo = $tmp[1];
		$anneeFinAbo = $tmp[2];
		
		
	}

	return $anneeFinAbo.'-'.$moisFinAbo.'-'.$jourFinAbo;
}


Petit nouveau ! | 3 Messages

03 juil. 2009, 19:21

merci pour ton aide mais je viens de trouver une fonction mysql simple qui me permet d'avoir la date suivant
SELECT ADDDATE('2009/07/03',1);
et ça marche la date suivante 2009/07/04
merci pour tout.
franchement merci.