begin process at 2012 05 28 15:25:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

Autre

 > 

ajouter un délai à une date en tenant compte des heures ouvrées


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

ajouter un délai à une date en tenant compte des heures ouvrées

mercredi 30 mai 2007 à 13:44:44 | ajouter un délai à une date en tenant compte des heures ouvrées

red2

Bonjour,
j'ai un problème avec le calcul d'une date, car je dois ajouter un délai à une date en prenant compte les heures ouvrées.
Pour cela j'essaye de faire une fonction qui prendrait comme argument:
Délai => durée en seconde (que je récupère dans une base de données)
Date => ça sera la date-heure du jour (getdate() de la base)
Variables: pour les heures ouvrées
Jours de la semaine (du lundi au vendredi)
$ho_m_LV = 08:15 => heure d'ouverture le matin du lundi au vendredi
$hf_m_LV = 12:00 => heure de fermeture le matin du lundi au vendredi
$ho_ap_LV = 13:00 => heure d'ouverture l'apres-midi du lundi au vendredi
$hf_ap_LV  = 18:00 => heure de fermeture l'apres-midi du lundi au vendredi
Samedi :
$ho_m_S  = 08:15 => heure d'ouverture le matin le samedi
$hf_m_S  = 12:30 => heure de fermeture le matin le samedi
$ho_ap_S = 13:15 => heure d'ouverture l'apres-midi le samedi
$hf_ap_S = 16:30 => heure de fermeture l'apres-midi le samedi 
Dimanche :Fermé
Et elle retournerai:
Date => date-heure qui sera forcément dans les heure d'ouverture
AIDEZ MOI SVP !!!
Alors s'il y a des personnes qui peuvent me donner des pistes, ça serait sympa.

mercredi 30 mai 2007 à 14:31:01 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

J_G

Salut,

En fin de compte, il faut que tu augmente ton délai de la durée des périodes non-ouvrées, pour trouver sa "vraie" durée.

Je te propose ce genre d'algorithme... certainement pas le meilleur :
Note : PNO = "période non-ouvrée"


-----------------
$date = // début du délai
$delai = // durée du delai, paramêtre donnée à ta fonction

$t = $date; // variable qui va parcourir le temps !

// Heuresement, on sait que $date tombe dans un période ouvrée...
do { // on cherche au moins une fois une PNO dans le delai
    $pno_date = debut_de_la_prochaine_PNO( $t ); // donc calculé par rapport à $t
    $pno_delai = duree_de_la_prochaine_PNO( $t ); // idem

    if ( $pno_date < $date + $debut ) { // cette prochaine PNO tombe dans le delai
       $delai += $pno_delai; // on ajoute le delai de cette pno
 
       $ok = false; // il va falloir refaire un boucle
       $t = $pno_date + $pno_delai; // on calcule désormais a partir de la fin de la PNO trouvée
       continue; // refaire la boucle
    }
} while ( false ) ;
------------------------------

petit conseil, utilise des temps absolus et aditionnable comme des chiffres.
Genre le nombre de secondes écoulées depuis le 1er janvier 1970... Soit le résultat de time() ou mktime()

A+

mercredi 30 mai 2007 à 15:18:11 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

red2

Salut,
Merci d'avoir répondu!
Ton algorithme est bien mais "$date = // début du délai" ne tombe pas forcément dans une période ouvrée.
Alors je rajouterai à ton algorithme un teste pour voir si $date se trouve dans une période ouvrée ou non.
Si oui je fais j'applique ton algo sinon je prend comme date de début la première heure ouvrée en aval.

mercredi 30 mai 2007 à 15:18:55 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

red2

Salut,
Merci d'avoir répondu!
Ton algorithme est bien mais "$date = // début du délai" ne tombe pas forcément dans une période ouvrée.
Alors je rajouterai à ton algorithme un teste pour voir si $date se trouve dans une période ouvrée ou non.
Si oui j'applique ton algo sinon je prend comme date de début la première heure ouvrée en aval.

mercredi 30 mai 2007 à 15:18:57 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

red2

Salut,
Merci d'avoir répondu!
Ton algorithme est bien mais "$date = // début du délai" ne tombe pas forcément dans une période ouvrée.
Alors je rajouterai à ton algorithme un teste pour voir si $date se trouve dans une période ouvrée ou non.
Si oui j'applique ton algo sinon je prend comme date de début la première heure ouvrée en aval.

mercredi 30 mai 2007 à 15:37:58 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

J_G

Oui, c'est bien ça...
mercredi 30 mai 2007 à 16:15:00 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

red2

if ( $pno_date < $date + $debut ) { // cette prochaine PNO tombe dans le delai
Que représente $début ?

mercredi 30 mai 2007 à 16:19:04 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

J_G

Salut,

C'est un bourde... $date+$delai

desolé
mercredi 30 mai 2007 à 16:49:17 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

red2

Excuse moi d'être aussi lourd mais tu t'y prendrais comment pour calculer :
debut_de_la_prochaine_PNO( $t ) ?

mercredi 30 mai 2007 à 17:18:12 | Re : ajouter un délai à une date en tenant compte des heures ouvrées

J_G

et oui.... c'est bien ça le plus dur dans l'algo (avec l'autre fonction)

Je pense qu'il faut voir tes PNO comme des objets :

class PNO {
    var $jds // "jour de la semaine" soit :0 pour dimanche, 6 pour samedi
    var $heure_debut; // entre 0 et 23
    var $minute_debut; // entre 0 et 59
    var $duree; // en seconde SVP !!!

    //puis une fonction qui donne la distance avec un temps en secondes
    function distance( $t ) {
       // décomposer $t en ces composante "calendrier" [année, mois, jour, heure, minute, seconde, jds] (cf. strftime() ou date())
       // Remplacer dans ces composantes par les valeurs heure et minute de ce PNO
       // Ajouter un correctif à jour pour atteindre le "bon" jds (en comparant le jds de $t et de $this)
       // Faire l'opération inverse en retransformant ces composantes en temps "secondes"
       // retourner cette valeur
    }
}


Puis tu fais une liste (array()) de tes PNO, tu compares les distances, prends la plus petite, te souviens de l'index pour la fonction suivante...

Malheuresement pour toi, il reste toujours pas mal de travail à faire


Cette discussion est classée dans : date, heure, heures, délai, lundi


Répondre à ce message

Sujets en rapport avec ce message

date & heure php [ par eax ] salutjuste une petite question je voudrais faire une addition de 20 minutes sur un timestamp Y-m-d H:i:s comment faire?merci sylvain Mysql -- Order by [ par BirD ] Hello tout le monde, c'est toujours a propos de mon forum, je désir afficher les messsages du plus vieux au plus récent. Dans ma table, j'ai un champ format de date et time en c+ [ par tertulia ] comment modifier le format de la date c'est dire remplacer les / par - et de l'heure càd remlacer : par - voilac pour pouvoir creer un fichier avec la Ecart entre differentes heures [ par must ] Bonjour,voila ce que je voudrais faire,est ce possiblePersonne viens sur ma page,j'enregistre l'heure de passage,et la lilmite de l'haure est minuit p Calcul ecart entre 2 heures [ par must ] Salut,voila ce que je cherche,mais trouve pas,alors si vous pouviez m'aiderJe fix une geure limite,dison:20 heures,30, minutes,20 secondesQuand on vie Liste des enregistrements d'une table [ par SuNn ] SuNnBonjourCette boucle while semble infinie et ... à la limite je peux comprendre pourquoi, mais je n'ai pas la solution pour autant. Voila mon code Date et heure d'un fichier sur un serveur. MySQL [ par bouffard ] Bonjour,J'utilise une base de données MySQL, avec différent champs (entre autre un champ "datecrea" format datetime).Je suis entrain de construire un date + heure [ par BeCaSiNe ] Salut à tous !J'essaye de mettre dans une variable ( $date ) la date + l'heure ( 14-10-2004 21H37 ) Mais je n'y arrive po !!! inserer des données dans une base access [ par rukiyes ] bonjour, voilà, j'ai un probleme pour inserer des donnée dans une base access.Et le pire c'est que je ne sais pas d'où vient le probleme, je ne compre date et heure du serveur et refresh [ par metis15 ] Bonjour,je n'ai rien trouvé sur le problème d'affichage de Date et Heure qui se met à jour toute les minutes par exemple, mais SANS recharger toute la


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 3,775 sec (3)

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