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 :

Comment puis-je contrer si un événement est planifié dans un mois défini


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 095
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 095
    Points : 943
    Points
    943
    Par défaut Comment puis-je contrer si un événement est planifié dans un mois défini
    Bonjour à tous,

    J'ai une série d'événement qui sont défini par une date de début et une date de fin.
    J'ai aussi un peit formulaire ou j'indique une date.

    Cette fonction va comparer si la date choici se trouve entre la date de début et la date de fin
    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
     
    compateTime(new DateTime($stage_start), new DateTime($stage_end), new DateTime($date))
    function compateTime($a, $b, $c){
     
    	$c1 = $c->setTime(23, 59, 59);
     
    	($a < $c1) ? $compare_deb = true : $compare_deb = false;
     
    	$c2 = $c->setTime(00,00,01);
     
    	($c2 < $b) ? $compare_fin = true : $compare_fin = false;
     
     
    	if($compare_deb==true && $compare_fin==true){
        	return true;
        }else{
    		// echo "FALSE<br>";
    		return false;
    	}
    }
    Le problème que j'arrive pas résoudre, c'est que dois modifier mon critere de recherche. C'est a dire, on ne veux plus sélectionner une date comme '2016-12-06 20:10:00" mais un mois.

    Et je n'arrive pas à modifier ma fonction, ci-dessus.

    Ce que j'ai essayer de faire est le suivant
    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
     
    $mois="02";
    compateTime(new DateTime($stage_start), new DateTime($stage_end), $mois)
    function compateTime($a, $b, $c){
     
    	$c1 = $c->setTime(23, 59, 59);
     
    	($a < $c1) ? $compare_deb = true : $compare_deb = false;
     
    	$c2 = $c->setTime(00,00,01);
     
    	($c2 < $b) ? $compare_fin = true : $compare_fin = false;
     
     
    	if($compare_deb==true && $compare_fin==true){
        	return true;
        }else{
    		// echo "FALSE<br>";
    		return false;
    	}
    }
    Mais là ca bug car à mois doit etre sous ce fomat
    $mois ="2016-".$mois."-01 20:10:10".

    L'autre problème, c'est que si je recherche mes événements pas lieu et que je laisse mon critere de recherche par mois, vide, j'aurai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois ="2016-00-01 20:10:10";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois ="2016--01 20:10:10".
    ce qui n'est pas correct car le mois 00 n'existe pas, et l'autre format n'est pas valide..

    Aussi, dans ma fonction CompareTime(), je dois aussi modifier $a et $b, pour que le jour de $a soit modifier à 01, pour le premier jour du mois, et $b soit modifier pour le jour soit le dernier jour du mois.

    Et que se passe-t-il si je met 31 et qu'on filtre le mois de février?

    Alors j'aimerais savoir comment vous modiferiez ce code
    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
     
    $mois = "02";
    compateTime(new DateTime($stage_start), new DateTime($stage_end), $mois)
    function compateTime($a, $b, $c){
     
    	$c1 = $c->setTime(23, 59, 59); // Ca ne jouera pas
     
    	($a < $c1) ? $compare_deb = true : $compare_deb = false;
     
    	$c2 = $c->setTime(00,00,01);
     
    	($c2 < $b) ? $compare_fin = true : $compare_fin = false;
     
     
    	if($compare_deb==true && $compare_fin==true){
        	return true;
        }else{
    		// echo "FALSE<br>";
    		return false;
    	}
    }
    pour que le fonction me retourne true si le mois de la date de début ou le mois la date de fin est identique à $c, soit 02, dans ce cas?

    Y-a-t-il pas un moyen d'extraire la mois de $a et le mois de $b pour après simplement le comparer avec $c?

    Merci pour vos lumières
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce que tu as écris avec tes modifications d'heures n'est pas très propre.
    Également n'utilise pas des variables $a, $b, $c1, $c2, on ne s'y retrouve pas.

    Ici, je regarde si les dates fournies chevauchent le mois donné.
    Si tu voulais seulement que le stage soit entièrement dans le mois, c'est encore plus simple : il suffit de regader que la date de debut et la date de fin aient le mois voulu.
    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
    <?php
    function compareDate($start, $end, $month) {
    	$objFirstday = new Datetime(date('Y') . '-' . $month . '-01');
     
    	$objLastday = clone $objFirstday;
    	$objLastday->modify('+1 month');
     
    	$objStage_start = new Datetime($start);
    	$objStage_end = new Datetime($end);
     
    	return ($objStage_start < $objLastday && $objStage_end >= $objFirstday);	
    }
     
     
    $month = "03";
    $start = "2016-03-21";
    $end = "2016-04-25";
    compareDate($start, $end, $month);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    et pour formater le mois sur 2 chiffres, ajouter à la fonction de sabotage :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $month = sprintf( "%02d", $month ); // 3 -> 03
    Ce qui permet d'indiquer le mois en numérique :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $month = 3;
    $start = "2016-03-21";
    $end = "2016-04-25";
    if( compareDate($start, $end, $month) ){
    	echo 'OK';
    }

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 095
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 095
    Points : 943
    Points
    943
    Par défaut
    Merci pour vos réponses!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/12/2016, 21h10
  2. Comment puis-je changer le titre d'une page dans rails?
    Par geforce dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 04/04/2016, 17h12
  3. Réponses: 1
    Dernier message: 31/08/2008, 19h44
  4. Réponses: 4
    Dernier message: 01/02/2008, 22h12
  5. Réponses: 2
    Dernier message: 03/07/2006, 21h14

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