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 :

délai dans une condition avec date


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut délai dans une condition avec date
    Bonjour,
    je sollicite encore une fois votre attention pour résoudre ce dilemne car
    je voudrais établir une condition qui implique un délai de 18 heures avec les fonctions date mais je ne sais absolument pas par ou commencer.

    Je m'explique:

    pour commencer j'utilise 2 champs date dans ma table
    un en format date seulement = date('Y-m-d')
    l'autre format TIME = date('H:i:s')

    je voudrais arriver a faire ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $date_depart && $time_depart est a l'interieur de 18 heures de NOW())

    Merci!!

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    Dés la départ cela ne peut être correcte, en cause de ton champ date, car le timestamp par défaut est 00:00:00, donc la condition correspondra toujours à 18h avant Minuit. Ce qui à mon avis n'est pas le but recherché.

  3. #3
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    est-ce qu'il y a moyen de concaténer les 2 champs date et heure pour comparer avec timestamp?

    eh bien oui, j'ai trouvé!!!

    avec mktime()


    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
    <?php
                   $date_now = mktime($heure,$min,$mois,$jour,$an);
    	      $date_limite = mktime($heure,$min,$mois,$jour,$an) + (18 * 3600);
    	     $Date_Dep = mktime($Heure_Dep,$Min_Dep,$Mois_Dep,$Jour_Dep,$An_Dep);
     
     
    	if ((isset($_GET['RefDepart'])) && ($_GET['RefDepart'] != "")) {
     
    		if ($date_limite <= $Date_Dep)   {
     
    bla bla
     
      }
    }
    ?>
    Maintenant, que se passe-il si il y a changement d'heure d'hiver et d'été ???

    j'aimerais débattre de cette question car j'ai lu dans la doc que le fait d'additionner ou soustraire des secondes pouvait entrainer des problemes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
    $lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
    $nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);
    ?>
    Note: Cette méthode est plus sûre que simplement ajouter ou retrancher le nombre de secondes dans une journée ou un mois à un timestamp, à cause des heures d'hiver et d'été.
    si quelqu'un aurait un avis a ce sujet

    merci!

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    J'ai fait un test pour être sûr...
    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
    function DateStr($ts){
    	return date('d-m-Y H:i',$ts);
    }
     
    function testDate($jour,$mois,$an, $heure,$min, $delai){
     
    	$date = mktime($heure,$min,0,$mois,$jour,$an);
     
    	echo '<p>'.DateStr($date)."</p>\n";
     
    	$limit = mktime($heure,$min,0,$mois,$jour,$an) + ($delai * 3600);
     
    	echo "<dl>\n";
    	echo '<dt>mktime($heure,$min,0,$mois,$jour,$an) + ($delai * 3600)</dt>'."\n";
    	echo '<dd>mktime('.$heure.','.$min.',0,'.$mois.','.$jour.','.$an.') + '.($delai * 3600)."</dd>\n";
    	echo '<dd>'.DateStr($limit)."</dd>\n";
     
    	$limit = mktime($heure+$delai,$min,0,$mois,$jour,$an);
     
    	echo '<dt>mktime($heure+$delai,$min,0,$mois,$jour,$an)</dt>'."\n";
    	echo '<dd>mktime('.($heure+$delai).','.$min.',0,'.$mois.','.$jour.','.$an.")</dd>\n";
    	echo '<dd>'.DateStr($limit)."</dd>\n";
     
    	$limit = strtotime('+'.$delai.' hours',$date);
     
    	echo '<dt>strtotime(\'+\'.$delai.\' hours\',$date)</dt>'."\n";
    	echo '<dd>strtotime(\'+'.$delai.' hours\','.$date.")</dd>\n";
    	echo '<dd>'.DateStr($limit)."</dd>\n";
    	echo "</dl>\n";
    }
     
    testDate(28, 3,2010, 0,0, 18); // Heure d'été
    echo "<hr>\n";
    testDate(31,10,2010, 0,0, 18); // Heure d'hiver
    Effectivement,
    mktime() est pratique pour faire des calculs de dates et des validations, car elle va automatiquement corriger les valeurs invalides
    L'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $limit = mktime($heure+$delai,$min,0,$mois,$jour,$an);
    ou de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = mktime($heure,$min,0,$mois,$jour,$an);
    $limit = strtotime('+'.$delai.' hours',$date);
    permet la prise en compte du changement d'heure.
    • Passage à l'heure d'été le 28-03-2010

      mktime($heure,$min,0,$mois,$jour,$an) + ($delai * 3600) renvoi :
      28-03-2010 19:00
      mktime($heure+$delai,$min,0,$mois,$jour,$an) renvoi :
      28-03-2010 18:00
      strtotime('+'.$delai.' hours',$date) renvoi :
      28-03-2010 18:00
      Passage à l'heure d'hiver le 31-10-2010

      mktime($heure,$min,0,$mois,$jour,$an) + ($delai * 3600) renvoi :
      31-10-2010 17:00
      mktime($heure+$delai,$min,0,$mois,$jour,$an) renvoi :
      31-10-2010 18:00
      strtotime('+'.$delai.' hours',$date) renvoi :
      31-10-2010 18:00

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    A partir de PHP 5.2, il y a l'objet "DateTime" :
    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
    <?php
      $date_Depart = ('2010-08-08');
      $heure_Depart = ('02:30:00');
     
      $dateDepart = new DateTime($date_Depart . ' ' . $heure_Depart);
      $dateLimite = new DateTime('now +18 hour');
     
      if ($dateDepart -> format('Y-m-d H:i:s') < $dateLimite -> format('Y-m-d H:i:s'))
      {
        echo 'Date départ plus petite que date limite + 18 heures';
      }
      else 
      {
        echo 'Date départ plus grande que date limite + 18 heures';
      }
    ?>

  6. #6
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    ahh! bien merci
    Eric2a et jeca

    Eric2a,, tout un test ce que que tu as fait la!

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

Discussions similaires

  1. mettre une date dans une cellule avec le bon format
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/02/2009, 17h54
  2. Comparaison Date avec Date dans une table avec Dlookup
    Par adrien.gendre dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/07/2007, 17h55
  3. Réponses: 5
    Dernier message: 23/05/2007, 11h43
  4. Insertion d'une date dans une table avec vba
    Par skeut dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 08h54
  5. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18

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