déterminer la date suivante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : déterminer la date suivante

par donluxes » 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.

par agité » 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;
}

par donluxes » 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.

par @rthur » 03 juil. 2009, 11:59

Bonjour,

Regarde du côté de la fonction mktime()
http://fr.php.net/mktime

par enneite » 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.

déterminer la date suivante

par donluxes » 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 :?: