Problème de date dans un créneau

Petit nouveau ! | 6 Messages

09 juin 2013, 16:45

Bonjour

J'ai actuellement un petit problème ou je m'arrache les cheveux (pour le moment il en reste mais sa va pas durée) . J'ai 3 créneaux de temps soit de :

00h00 à 08h00
08h00 à 20h00
20h00 à 00h00

j'ai ensuite des heures qui coïncide avec les mêmes dates , et je souhaiterai savoir si mon heure défini correspond à l'un des trois créneaux .

J'ai tenté de faire le code suivant et de faire une comparaison avec un timestamp qui est retourné par strtotime .
			        $datedayCR1 = (int) strtotime($y.'-'.$m.'-'.$d.' '.$heure.':'.$min.':'.$sec);
				$datedayCR1a = (int) strtotime($y.'-'.$m.'-'.$d.' 00:00:00');
				$datedayCR1b = (int) strtotime($y.'-'.$m.'-'.$d.' 08:00:00');

				$datedayCR2 = (int) strtotime($y.'-'.$m.'-'.$d.' '.$heure.':'.$min.':'.$sec);
				$datedayCR2a = (int) strtotime($y.'-'.$m.'-'.$d.' 08:00:00');
				$datedayCR2b = (int) strtotime($y.'-'.$m.'-'.$d.' 20:00:00');

                                $datedayCR3 = (int) strtotime($y.'-'.$m.'-'.$d.' '.$heure.':'.$min.':'.$sec);
				$datedayCR3a = (int) strtotime($y.'-'.$m.'-'.$d.' 20:00:00');
				$datedayCR3b = (int) strtotime($y.'-'.$m.'-'.$d.' 00:00:00');

					if (($datedayCR1a > $datedayCR1 ) && ($datedayCR1b > $datedayCR1)){
						$creneau1 = "C1 oui";
						$categorie = "CAT 1";
					}else{
						$creneau1 = "C1 non";
					}


                                       if (($datedayCR2a > $datedayCR2 ) && ($datedayCR2b > $datedayCR2)){
						$creneau2 = "C2 oui";
						$categorie = "CAT 2";
					}else{
						$creneau2 = "C2 non";
					}

                                      if (($datedayCR3a > $datedayCR3 ) && ($datedayCR3b > $datedayCR3)){
						$creneau3 = "C3 oui";
						$categorie = "CAT 3";
					}else{
						$creneau3 = "C3 non";
					}

Merci de votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2013, 17:44

Salut

Tu ne fait que comparer les timestamp.
Il te faut récupérer les heures, pour cela tu peux utiliser la fonction date ou le classe dateTime.

Ensuite tu pourra comparer les heures.
Si 0 < h < 8
Ou si 8< h <20
Sinon c'est que h est > 20

Attention a bien définir les bornes (utilise au besoin inférieur ou égale).

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

09 juin 2013, 17:47

Bonjour

Merci de m'avoir répondu . Ne l'ayant jamais utiliser , comment sa se formaterai avec le code existant ?

Merci encore de votre aide .

Kilian

Eléphanteau du PHP | 46 Messages

09 juin 2013, 17:52

Salut !

Pourquoi pas tout simplement :
<?php 

$heure = date("H");

if ($heure>0){
$creneau = "CAT1";
}
elseif ($heure>8){
$creneau = "CAT2";
}
elseif ($heure>20){
$creneau = "CAT3";
}

?>


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2013, 18:17

Parce que le premier if sera vrai 23 cas sur 24 !


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

09 juin 2013, 18:18

Salut !

Pourquoi pas tout simplement :
<?php 

$heure = date("H");

if ($heure>0){
$creneau = "CAT1";
}
elseif ($heure>8){
$creneau = "CAT2";
}
elseif ($heure>20){
$creneau = "CAT3";
}

?>

merci de ton aide tib41 . En faite pour bien faire il me faudrait la minute et la seconde . Le but etant de detecter un horaire dans un des trois creneaux

merci en tous cas de ton code

Petit nouveau ! | 6 Messages

09 juin 2013, 18:21

Parce que le premier if sera vrai 23 cas sur 24 !


@+
Comment faire pour que sa touche les 24 cas sur 24 de la maniere la plus simple du monde ?

Merci de votre aide etant vraiment neophyte avec les dates de php

Eléphanteau du PHP | 46 Messages

09 juin 2013, 18:27

Parce que le premier if sera vrai 23 cas sur 24 !


@+
Comment faire pour que sa touche les 24 cas sur 24 de la maniere la plus simple du monde ?

Merci de votre aide etant vraiment neophyte avec les dates de php
Comme ça je pense :
<?php 

$heure = date("H");

if ($heure>=0){
$creneau = "CAT1";
}
elseif ($heure>8){
$creneau = "CAT2";
}
elseif ($heure>20){
$creneau = "CAT3";
}

?>
La minute et la seconde ne sont pas importante si tes créneaux ne sont qu'en fonction des heures ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2013, 19:16

@thib41 : non !

Tant tout les cas seul le if sera utilisé (car le premier rencontré). Celui cic sera toujours validé car l'heure sera toujours supérieure ou égale a zéro.

De plus tu ne peux pas déterminer un créneaux sans utiliser les deux bornes.
Il est vrai que dans l'absolue seul le cas 8h 20h a besoin des deux bornes il suffit de tester si inférieure a 8h pour le premier, entre 8h et 20h poour le second et le reste est forcément supérieur a 20 il s'agit donc du dernier créneaux.

Reste a savoir a quel créneaux appartienne 8h et 20h.

Kilian tu a deux exemples de structure à utiliser.

Le miens est fonctionnel, test le, comprend le et tu devrais pourvoir cuire ce que veux.

Quand a récupérer correctement les valeurs ce n'est pas compliqué avec les fonctions que je t'ai indiqué dans mon 1er message le tous couplé avec une partie de ce que tu a fait.

Au pire si le format est correct un explode peu le faire.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

09 juin 2013, 19:24

@Thib41 : Merci mais j'ai tenté de testé le code et sa ne marche pas avec les horaires : 20:10:30 -> 22:26:30 , il ne me met pas sa en créneau 3 de 20h à 00h

@Moogli : Merci de ta réponse mais plus globalement je ne comprend pas ta réponse ci-dessus ou alors je n'arrive pas du tous à utiliser le datetime ne l'ayant jamais utilisé . Comment ferai tu avec date() ou datetime() ?

Petit nouveau ! | 6 Messages

10 juin 2013, 08:05

Bonjour

Je n'y arrive vraiment pas et je désespère . Merci de votre aide .

Kilian

ViPHP
ViPHP | 4039 Messages

10 juin 2013, 11:08

Note: c'est pas habituel de recevoir des demandes d'aide par messagerie privée. :non:

Tant que j'y suis:
Moogli essaye réellement de t'aider, mais comme beaucoup d'entre nous, c'est un professionel, ce qui fait que des évidences pour lui sont des obstacles insurmontables pour toi. Et je parle de choses très basiques, ultra élémentaires, comme des structures de contrle, et la logique qui va avec: un domaine ou Thib41, bien que plein de bonne volonté, semble aussi avoir quelques lacunes, ce qui ajoute à la confusion ambiante.

Image

Je propose une autre structure, qui sans atteindre la perfection devrait atteindre son but, le tout en bon français tout plein:

Code : Tout sélectionner

H = heure_à_tester Creneau = creneau_0à8 Si H supérieur ou égal à 8 Creneau = creneau_8à20 Si H supérieur ou égal à 20 Creneau = creaneau_20à0
La subtilité c'est l'absence de Sinon (aka else if).



Sinon, pour vous chipoter la tête:
switch(true)
    {
    case ($h < 8):
        $creneau = "0à8";break;
    case ($h >= 20):
        $creneau = "20à0";break;
    default:
        $creneau = "8à20";break;
    }
Faudrait essayer avec un while ou un for ;)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 juin 2013, 19:52

Ah tiens, je suis pas le seul a avoir été sollicité par mp :p

Bon ben j'y vais quand même de mon p'tit commentaire et juste pour dire que le principe des elseif est tout à fait viable, à condition de commencer par le cas le plus restrictif :) En effet toutes les heures sont supérieures à 0, mais seulement 4 sont supérieures à 20 :
$heure = date("H");

if ($heure>20){
$creneau = "CAT3";
}
elseif ($heure>8){
$creneau = "CAT2";
}
elseif ($heure>=0){ // un else ici ferait aussi bien l'affaire
$creneau = "CAT1";
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...