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 :

Fonctionnement bizarre DateIntervale


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Fonctionnement bizarre DateIntervale
    Bonjours ,

    Alors je dois faire un calendrier et en fonction de la date je borne du lundi au vendredi .

    En ayant chercher sur le net j'ai trouver plusieurs solution en utilisant "timestamp"/"mktime".

    J'ai décidé d'utiliser le jour de la semaine et d'appliquer un DateIntervale (pas vraiment certain que c'est fait pour cela).

    Et voila le 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    try
    {
    	$fuseau="Europe/Paris";
        	$tz = new DateTimeZone($fuseau);
    }
    catch(Exception $e)
    {
        	exit($e->getMessage());
    }
     
    $date= new DateTime("now",$tz);
    $date_format=$date->format('d-m-Y');
    $jours=$date->format("N");
    //Traitement de debut semaine
    if ($jours==1)
    {
    	$debut=$date_format;
    }
    elseif ($jours>1 && $jours<6)
    {
    	$decal=$jours-1;
    	$debut=$date->sub(new DateInterval("P".$decal."D"));
    	$debut=$debut->format('d-m-Y');
    }
    elseif ($jours>5)
    {
    	$decal=(7-$jours)+1;
    	$debut=$date->add(new DateInterval("P".$decal."D"));
    	$debut=$debut->format('d-m-Y');	
    }
    //Traitement de fin semaine
    if ($jours<6)
    {
    	$decal=4-$jour;
    	$fin=$date->add(new DateInterval("P".$decal."D"));
    	$fin=$fin->format('d-m-Y');
    }
    elseif($jours>5)
    {
    	$fin=$date->add(new DateInterval("P4D"));
    	$fin=$fin->format('d-m-Y');
    }
    Le soucis viens du dernier elseif qui traite la fin de semaine , il ne suit aucune logique " j'ai trouver P4D de façon empirique".
    Le traitement des jours weekend renvois au vendredi prochain , mais la logique voudrais que j'ajoute 6 ou 5 jours a la date dans le cas ou on tombe sur un samedi ou un dimanche .

    Dans mon cas il faut un P4D dans tout les cas pour avoir le vendredi prochains , Pourquoi ???

    Merci !!!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Il y'a une erreur, il manque un s à la variable $jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Traitement de fin semaine
    if ($jours<6){
    	$decal=4-$jour;  // <== ici
    	$fin=$date->add(new DateInterval("P".$decal."D"));
    	$fin=$fin->format('d-m-Y');
    }
    elseif($jours>5){
    	$fin=$date->add(new DateInterval("P4D"));
    	$fin=$fin->format('d-m-Y');
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci ça m'as déjà permis de bidouiller le php.ini pour faire apparaitre les erreur Php.

    Alors j'ai fais des modif sur le code suite a a ta judicieuse remarque (je remet tout).

    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
    47
    48
     
    // Partie inchangé
    try
    {
    	$fuseau="Europe/Paris";
        	$tz = new DateTimeZone($fuseau);
    }
    catch(Exception $e)
    {
        	exit($e->getMessage());
    }
     
    $date= new DateTime("now",$tz);
    $date_format=$date->format('d-m-Y');
    $jours=$date->format("N");
    //Traitement de debut semaine
    if ($jours==1)
    {
    	$debut=$date_format;
    }
    elseif ($jours>1 && $jours<6)
    {
    	$decal=$jours-1;
    	$debut=$date->sub(new DateInterval("P".$decal."D"));
    	$debut=$debut->format('d-m-Y');
    }
    elseif ($jours>5)
    {
    	$decal=(7-$jours)+1;
    	$debut=$date->add(new DateInterval("P".$decal."D"));
    	$debut=$debut->format('d-m-Y');	
    }
     
                                 //Modification effectué (Raisonnement "logique" mais résultat incohérent)
    //Traitement de fin semaine
    // if du lundi au vendredi "jours de 1 a 5"
    if ($jours<6)
    {
    	$decal=5-$jours;
    	$fin=$date->add(new DateInterval("P".$decal."D"));
    	$fin=$fin->format('d-m-Y');
    }
    elseif($jours>5)
    {
    	$decal=(7-$jours)+5;
    	$fin=$date->add(new DateInterval("P".$decal."D"));
    	$fin=$fin->format('d-m-Y');
    }
    Même si la logique du code parait bonne la fin de semaine retourné est erroné

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé après plusieurs testes .

    Le "problème" vient du fonctionnement des méthodes qui modifie mon objets date.

    $debut et $fin font appel a add() et sub() il semblerais que ces méthodes ne fonctionne pas comme je m'imaginais.

    Il récupère mon attribut date et le modifie donc quand mon objet date subit les traitements pour le "début de semaine" ,la valeur de l'attribut date a la fin du traitement n'est pas forcement la même qu'au début .(j’espère m’être fais comprendre)

    Pour faire simple il suffit de redéfinir $date en copiant la ligne 13 du code a la ligne 36.

    Encore merci et si vous chercher un bout code qui chope le Lundi/Vendredi de la semaine et vous renvois a la semaine prochaine en week-end Voila ^^.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Le "problème" vient du fonctionnement des méthodes qui modifie mon objets date.
    Oui, à partir de php 5.5 il existe la classe DateTimeImmutable (http://php.net/manual/fr/class.datetimeimmutable.php) qui évite ce genre de problème

Discussions similaires

  1. [IE/FF] Balise <object>, fonctionnement bizarre sous IE
    Par m312 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 25/07/2007, 17h19
  2. [Swingx auto complete] fonctionne bizarre
    Par grabriel dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 17/07/2007, 15h18
  3. [HSQLDB]fonctionnement bizarre :/
    Par afrikha dans le forum JDBC
    Réponses: 9
    Dernier message: 12/09/2006, 08h15
  4. TWebBrowser qui fonctionne bizarrement
    Par sillycoder dans le forum Delphi
    Réponses: 2
    Dernier message: 18/07/2006, 10h00
  5. Fonctionnement bizarre Dbase Memo
    Par zarbouine dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/04/2006, 09h11

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