begin process at 2012 05 31 10:44:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

Toujours a la recherche d'aide pour les dates !!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Toujours a la recherche d'aide pour les dates !!!

vendredi 1 juillet 2005 à 11:07:28 | Toujours a la recherche d'aide pour les dates !!!

nagrom_om

Bon je rééxplique mon probleme. Je choisi une date de depart et une date d'arrivée (demande de congés) je dois calculer le nombre de jours ouvrables pendant cette periode.

Alors dans ma page j ai ca : 

<?
// Test d'existence de la date de debut sinon date du jour
 if (!isset ($JourDeb)  || $JourDeb == "")  $JourDeb  = date('d');
 if (!isset ($MoisDeb)  || $MoisDeb == "")  $MoisDeb  = date('m');
 if (!isset ($AnneeDeb) || $AnneeDeb == "") $AnneeDeb = date('Y');
 $timestamp_depart = mktime(0, 0, 0, $MoisDeb, $JourDeb, $AnneeDeb);
 $timestamp_depart_heure = mktime($heureDepart, $minDepart, 0, $MoisDeb, $JourDeb, $AnneeDeb);
 
 // Test d'existence de la date de fin sinon date du jour +1
 $TimeFin = strtotime ("now") + 86400; // 86400 =  24 * 60 * 60 = 1 jour
 if (!isset ($JourFin)  || $JourFin == "")  $JourFin  = date('d', $TimeFin);
 if (!isset ($MoisFin)  || $MoisFin == "")  $MoisFin  = date('m', $TimeFin);
 if (!isset ($AnneeFin) || $AnneeFin == "") $AnneeFin = date('Y', $TimeFin);
 $timestamp_retour = mktime(0, 0, 0, $MoisFin, $JourFin, $AnneeFin);
 $timestamp_retour_heure = mktime($heureRetour, $minRetour, 0, $MoisFin, $JourFin, $AnneeFin);
 
 // Calcul du nombre de jours dans le mois
 $NbrJourDuMoisDeb = date ('t', mktime (0, 0, 0, $MoisDeb, 1, $AnneeDeb));
 $NbrJourDuMoisFin = date ('t', mktime (0, 0, 0, $MoisFin, 1, $AnneeFin));
 
 // Constantes navigation de date
 $AnneeInf = strftime ("%Y") - 1;
 $AnneeSup = strftime ("%Y") + 5;
 
 
 $nbJour = ($timestamp_retour-$timestamp_depart)/(60*60*24);// 86400 =  24 * 60 * 60 = 1 jour
 $nbJourOuvrable = $nbJour - jour_ferie($timestamp_depart,$timestamp_retour);
 
 ?>

et ma fonction de calcul de jours fériés (toujours la même) :

<?

// SERVANT AU CALCUL DES JOURS OUVRABLES
// Fonction retournant le nombre de jour fériés samedis et
// dimanches entre 2 dates entrées en timestamp
function jour_ferie($timestampStart, $timestampEnd)
{
  
 // Initialisation de la date de début
 $jour = date("d", $timestampStart);
   $mois = date("m", $timestampStart);
   $annee = date("Y", $timestampStart);
 $nbFerie = 0;
 while ($timestampStart <= $timestampEnd)
 { 
  
    // Définition des dates fériées fixes
  if($jour == 1 && $mois == 1) $nbFerie++; // 1er janvier
  if($jour == 1 && $mois == 5) $nbFerie++; // 1er mai
  if($jour == 8 && $mois == 5) $nbFerie++; // 5 mai
  if($jour == 14 && $mois == 7) $nbFerie++; // 14 juillet
  if($jour == 15 && $mois == 8) $nbFerie++; // 15 aout
  if($jour == 1 && $mois == 11) $nbFerie++; // 1 novembre
  if($jour == 11 && $mois == 11) $nbFerie++; // 11 novembre
  if($jour == 25 && $mois == 12) $nbFerie++; // 25 décembre
  
    // Calcul du jour de pâques
  $date_paques = easter_date($annee);
    $jour_paques = date("d", $date_paques);
    $mois_paques = date("m", $date_paques);
    if($jour_paques == $jour && $mois_paques == $mois) $nbFerie++;
    // Pâques
  
    // Calcul du jour de l ascension (39 jours après Paques)
    $date_ascension = mktime(
    date("m", $date_paques),
    date("d", $date_paques) + 39,
    date("Y", $date_paques)
    );
    $jour_ascension = date("d", $date_ascension);
    $mois_ascension = date("m", $date_ascension);
    if($jour_ascension == $jour && $mois_ascension == $mois) $nbFerie++;
    //Ascension
  
    // Calcul de Pentecôte (11 jours après Ascension)
  $date_pentecote = mktime(
    date("m", $date_ascension),
    date("d", $date_ascension) + 11,
    date("Y", $date_ascension)
    );
    $jour_pentecote = date("d", $date_pentecote);
    $mois_pentecote = date("m", $date_pentecote);
    if($jour_pentecote == $jour && $mois_pentecote == $mois) $nbFerie++;
    //Pentecote
  
    // Calul des samedis et dimanches
  $jour_julien = unixtojd($timestampStart);
    $jour_semaine = jddayofweek($jour_julien, 0);
    if($jour_semaine == 0 || $jour_semaine == 6) $nbFerie++;
    //Samedi (6) et dimanche (0)
  
    // Incrémentation du nombre de jour ( on avance dans la boucle)
    $jour++;
    $timestampStart=mktime(0,0,0,$mois,$jour,$annee);
 
 }
  
   return $nbFerie;
  
}//Fin de la fonction
  
 
?>

... Pour résumer je trouve des erreurs de calcul. En fait je pense que ca vient des années bisextiles.  ai utilisé un floor pour arrondir mais le probleme c'est que sur une difference de plusieurs années la fonctions zappe des jours.

De plus je crois que la fonction deconne également sur le passage d'un mois à l'autre.  Genre du 31/07/2005 au 01/08/2005 je trouve 0 jours ouvrables. Alors que je devrais en avoir 2 ... Alors que du 01/06/2005 au 02/06/2005 j ai bien 2 jours ouvrables.

Si qq1 a une idée et a reusi à arriver jusque (  ) la je le remercie d'avance.  



Je suis capable du pire comme du meilleur, mais dans le pire c'est moi le meilleur !!!

vendredi 1 juillet 2005 à 12:10:29 | Re : Toujours a la recherche d'aide pour les dates !!!

mageonyme

Membre Club

désolé mais pourquoi tu n'utilise pas plutot la fonction time(); qui donne le nombre de seconde (depuis une date dans les années 70) et qui permet donc de franchir toutes les barrières concernant les années bisextiles et tout le reste

exemple :

$date=time(); ça donne par exemple 1120160918 (en sec)

puis tu utilise pr l'écart une fonction

je sais il faut tout refaire, mais c'est moins prise de tete après avec ce type de date...



Cette discussion est classée dans : date, jour, mois, nbferie, ascension


Répondre à ce message

Sujets en rapport avec ce message

probléme calcule dimanche [ par sensoide ] Bonjour a tous,voici donc une source que j'ai pris sur phpcs, mais il y a comme qui dirait un probléme pour le calcul des dimanches et je n'arive pas Probleme de boucle, calcul jours ouvrés [ par Akita95 ] Bonjour à tous,J'essaye de faire un formulaire de congés qui calcule le nombre de jours ouvrés entre deux dates données en paramètre puis coverties en calendrier annuel, surligné jours en fonction d'une table [ par rouskard ] Bonjour à tous,J'ai un petit problème dans l'élaboration d'un calendrier annuel. J'aimerais pouvoir faire ressortir les jours où une personne a eu un Gestion des dates et format [ par thaiboxing ] Bonjour, Je suis entrain de découvrir php a l'aide d'un guide php, et la je bloque sur mon code le voici : //Code calendrier date et heure // SUJET POUR QUELQU' UN QUI CONNAIT LE PHP AVEC BASE SQL [ par philou4212 ] je remercie la personne qui peut me donner un coup de mains sur le sujet je coince un  peuVoilà j'ai un calendrier qui fonctionne avec une base sql il Problème disabled [ par naroco ] bonjour je créé un formulaire de collecte d'heures. je propose au collecteur la date du jour ou une autre date via un bouton radio. s'il s'agit d'une Afficher les jours de la semaine... [ par stevethx27 ] Bonjour,je tente (en vain) d'afficher sur une ligne les jours de la semaine. J'ai utilisé un script trouvé sur le site que j'ai modifié et ça donne ma Calendrier / Agenda [ par kitgraphic ] Voilà j'ai un calendrier avec des évènement, tout marche bien , mais je voudrais que le jour actuel (la cellule ou il se trouve soit d'une autre coule traduction date [ par kenny18 ] salut,J'ai un champ type "datetime" dans une table. Je vais rechercher cette date dans mon code pour l'afficher. La date = $row[5] ci-dessous. Mon seu Calendrier Location [ par piep14 ] Bonjour le forum, j'aurais une question à vous soumettre car je bloque. J'ai fait un calendrier avec le code que je vous présente ci après. Le trucs,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales