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] Comparer 2 périodes


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut [Dates] Comparer 2 périodes
    Bonjour,

    J'essaye de savoir si 1 période demandé chevauche les periodes enregistrees dans ma base de données. L'idée c'est de comparer les timestamps des dates de début et de fin des période.
    Si la date de début de la période demandée, est incluse dans une période enregistrée dans la BDD on retourne true.
    Si la date de fin de la période demandée, est incluse dans une période enregistrée dans la BDD on retourne true aussi.

    Le pb c'est que ma fonction ne renvoit jamais true ...

    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
     
    function chevauche($jourDeb, $moisDeb, $anneeDeb, $jourFin, $moisFin, $anneeFin){
    	//CONNECTION A LA BASE DE DONNEES
    	include "connection.php";
    	mysql_select_db($database, $db);
     
    	//PARCOURS DES PERIODES ENREGISTREES
    	$res = "select * from periodes";
      	$select = mysql_query($res) or die(mysql_error());
     
            // CREATION DES TIMESTAMPS DES 2 DATES DEFINISSANT LA PERIODE
    	$timestampDeb = mktime(0, 0, 0, $jourDeb, $moisDeb, $anneeDeb);
    	$timestampFin = mktime(0, 0, 0, $jourFin, $moisFin, $anneeFin);
     
    	while($line=mysql_fetch_array($select,MYSQL_ASSOC)){
    		$jour1 = $line['jour_deb'];
    		$mois1 = $line['mois_deb'];
    		$annee1 = $line['annee_deb'];
    		$jour2 =  $line['jour_fin'];
    		$mois2 = $line['mois_fin'];
    		$annee2 = $line['annee_fin'];
     
    		$timestamp1 = mktime(0, 0, 0, $mois1, $jour1 , $annne1);
    		$timestamp2 = mktime(0, 0, 0, $mois2, $jour2 , $annne2);
     
    		if ((($timestampDeb<=$timestamp2) && ($timestampDeb>=$timestamp1)) || (($timestampFin<=$timestamp2) && ($timestampFin>=$timestamp1))) return true;
    	}
    return false;
    }

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    J'ai fais un echo des dates testé ... et les timestamps ont l'air bon :

    Je fais donc un test pour savoir si la période
    du 04/01/2008 au 05/07/2008 chevauche la période
    du 05/05/2008 au 07/05/2008

    et j'obtiens toujours FALSE alors que les timestamps ont l'air bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     dateDeb1           dateFin1       DateDebBDD  DateFinBDD
    05/05/2008   |   07/05/2008   |   5/1/2008   |   5/7/2008
     
    et les timestamps correspondants
     
    1209938400 | 1215208800 | 957132000 | 957650400

  3. #3
    Membre éprouvé Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Déjà 3 de tes timestamp sont faux.

    07/05/2008 >> 1210111200
    05/01/2008 >> 1199487600
    05/07/2008 >> 1215208800

    peut être a cause de l'inverison ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$timestampDeb = mktime(0, 0, 0, $jourDeb, $moisDeb, $anneeDeb);
    	$timestampFin = mktime(0, 0, 0, $jourFin, $moisFin, $anneeFin);
    int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    C'est pas encore ça mais c'est mieux déjà.
    C'est bien vu, merci depuis le temps que je bloque dessus j'ai l'impression de ne plus rien comprendre

    Après cette correction, ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     dateDeb1           dateFin1       DateDebBDD  DateFinBDD
    20/07/2008   | 21/07/2008     | 18/7/2008   | 29/7/2008
     
    et les timestamps correspondants
     
    1216504800 | 1216591200 | 963871200 | 964821600
    ... mais toujours false

  5. #5
    Membre éprouvé Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Encore faux !

    j'utilise un petit convertisseur de timestamp pour verifier tes valeur : http://labo.arthak.com/articles/outil/, et c'est peut être car tu ressort tes variables en 27/1/2008 plutot qu'en 27/01/2008 ?

    Voila ma fonction avec les dates que tu as mit :

    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
     
    <?php
    //true si les timestamp chevauche
    function chevauche($timestampDeb,$timestampFin,$timestamp1,$timestamp2)
    {
    if ((($timestampDeb<=$timestamp2) && ($timestampDeb>=$timestamp1)) 
    || (($timestampFin<=$timestamp2) && ($timestampFin>=$timestamp1))) 
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
     
     
    $t1 = "1216504800";
    $t2 = "1216591200";
     
    $u1 = "1216332000";
    $u2 = "1217282400";
     
    echo chevauche($t1,$t2,$u1,$u2);
    ?>
    Et qui me retourne true. Bonne nuit !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    Même en fesant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $jour1 = $line['jour_deb'];
    		$mois1 = '0' . $line['mois_deb'];
    		$annee1 = $line['annee_deb'];
    		$jour2 =  $line['jour_fin'];
    		$mois2 = '0' . $line['mois_fin'];
    		$annee2 = $line['annee_fin'];
    		
    		$timestamp1 = mktime(0, 0, 0, $mois1, $jour1 , $annne1);
    		$timestamp2 = mktime(0, 0, 0, $mois2, $jour2 , $annne2);
    les timestamps sont toujours faux ...

    Pour info, dans la base de donnée, j'ai enregistré les date en séparant le jour(smallint(2)), le mois (smallint(2)) et l'annee(smallint(4)) ...
    Donc c'est quand même vraiment un phénomène étrange qu'il se passe là ...

    P.S. : t'as du bien te marrer dans le style avec "Calculer la distance entre deux villes à partir de coordonnées géographiques en degré décimales"

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2006, 01h19
  2. [Dates] comparer deux date
    Par BigBarbare dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 23h05
  3. Retourner toutes les dates d'une période
    Par Gwipi dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/03/2006, 23h44
  4. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15
  5. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21

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