IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] Fonction calcule le nombre de demi-heures


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut [Dates] Fonction calcule le nombre de demi-heures
    Bonjour

    J'ai un petit souçis avec une fonction que j'ai créé (d'où le souçi ) et que je n'arrive pas à regler;

    Voici ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    function occupation($jour){
    	//Requete en fonction de $jour. Le format de ce dernier est par exemple '2007-07-18'
    	//On selectionne donc toutes les reservations de la journée pour un objet donné
    	$sql = "SELECT debut_reservation, fin_reservation FROM reservation"
    		." WHERE statut_reservation='V' AND debut_reservation>='".$jour.' 00:00:00'."'"
    		." AND fin_reservation<'".$jour.' 23:59:59'."' ORDER BY debut_reservation";
    	$temp = mysql_query($sql);
     
    	//$i sera le return de la fonction. C'est le nombre de demi_heures que l'objet est reservé sur la journée. Ca me permettra de faire un 
    	// pourcentage au final, ($i/48)*100
    	$i = 0; 
     
    	//Pour chaque reservation
    	while($result = mysql_fetch_assoc($temp)){
    		//$result['debut_reservation'] est un champ datetime
    		//$début va contenir un tableau avec les heures du debut de la reservation (on connait la date, plus besoin)
    		$date = explode(" ", $result['debut_reservation']);
    		$debut = explode(":", $date[1]);
    		//$fin va contenir un tableau avec les heures de fin de la reservation
    		$date = explode(" ", $result['fin_reservation']);
    		$fin = explode(":", $date[1]);
     
    		// Tant que l'heure de début n'est pas égale à l'heure de fin ...
    		while(($debut[0] != $fin[0]) && ($debut[1] != $fin[1])){
    			//Une demi-heure en plus dans $i
    			$i++;
    			//Je ne prend que les tranches par demi-heures lors d'un enregistrement, donc 
    			//les minutes ne peuvent contenir que '00' ou '30'
    			//Si ca n'est pas déjà une demi-heure
    			if($debut[1] == '30'){
    				//On passe les minutes à '00'
    				$debut[1] = '00';
    				//Et on rajoute une heure pour se rapprocher de $fin
    				$debut[0]=$debut[0]+1;
    			}
    			else{
    				//Si c'etait déjà '00', on passe donc à '30' sans rajouter d'heure
    				$debut[1] = '30';
    			}
    		}
    	}
    	return $i;
    }
    ?>
    Voila j'ai essayé de commenter à fond. Le but du programme est que je rentre une date, il va rechercher les enregistrements correspondant (et surtout les heures de début et fin des reservations à cette date) et doit me calculer et me retourner le nombre de 1/2 heures que l'item est reservé dans cette journée.

    Les champs dates des reservations sont des datetimes, mais les secondes sont toujours '00' et les minutes ne sont que '00' ou '30'.

    Le problème est que la fonction ne me retourne que 1, ce qui ne correspond pas au nombre de demi-heures ... par exemple '2007/07/18 10:00:00' pour début et '2007/07/18 12:30:00' devrais me donner 5, et je n'ai jamais autre chose que 1, ou 0 quand il n'y a rien !

    Si vous pouvez m'aider merci beaucoup

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par défaut
    Oula... J'ai l'impression que tu te compliques la vie... Si j'ai bien compris, tu veux connaître le temps d'une réservation en demi-heure ? Donc, plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($fin[1] > $debut[1]){
      // fin = 30, debut = 00
      $i++;
    }
     
    // heure de fin - heure de debut = nombre d'heure
    // multiplié par 2 pour obtenir les demi-heure
    $i += ($fin[0] - $debut[0])*2;
    J'ai pas vérifié, mais algorithmiquement, ça me semble jouer, non ?

    Pour reprendre ton exemple :

    $i = 0;
    30 > 00 // $i= 1
    (12 - 10) * 2 = 4 // $i = 5

  3. #3
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    looool ah bah oui c'est carrément plus simple comme cela. J'etais tellement dans mon truc a faire des boucles en veux-tu en voila que j'ai meme pas pensé à ca.

    Je regarde et je met le topic en resolu si ca marche ! Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] VBA : Fonction calcul du nombre de samedi dimanche et férié
    Par jopont dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/04/2015, 11h07
  2. Réponses: 6
    Dernier message: 12/01/2008, 19h21
  3. Calculer le nombre de jours/heures/min/sec restant
    Par skaty dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/11/2006, 18h47
  4. Réponses: 4
    Dernier message: 11/06/2006, 13h05
  5. [Optimisation][Fonction]calcul du nombre de jours ...
    Par m-mas dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/10/2005, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo