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] [PHP 4.3.10] alternative à mktime()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut [Dates] [PHP 4.3.10] alternative à mktime()
    Bonjour,

    Dans un script, je souhaiterais comparer une date D1 (jj/mm/aaaa) à la date du jour D2. Pour cela, j'utilise les fonctions mktime() et time() (voir code ci-dessous) mais la fonction mktime me génére un Warning lorsque la date D1 est antérieure au 1 janvier 1970 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mktime(0, 0, 0, $mois, $jour, $annee) > time()
    Connaissez vous une alternative à mktime() et time() pour comparer deux dates ?

    merci d'avance.

  2. #2
    Membre chevronné Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Par défaut
    Salut
    Dois-tu forcément récupérer un timestamp UNIX?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    non, la finalité de mon test est de vérifier qu'une date saisie est :
    - valide
    - antérieure à la date du jour

    J'ai utilisé mktime() et time() car c'est à mon sens la solution la plus efficace pour effectuer des deux tests mais cela ne fonctionne pas avec les date antérieure au 1 janvier 1970 en PHP 4.3.10 (ca fonctionne en PHP 5.xx mais le serveur n'est pas en PHP 5.xx )

  4. #4
    Membre chevronné Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Par défaut
    Dans ce cas, tu peux faire la comparaison à chaque variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    if(
      $jour < date('d') && 
      $mois <= date('m') && 
      $annee <=date('Y')
    ){
      echo 'La date est valide et antérieure à la date actuelle';
    }
    else{
      echo 'La date n\'est pas valide ou n\'est pas antérieure à la date actuelle';
    }
    ?>

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    hum... ton code permet dans certaines confirgurations de date de vérifier l'antériorité mais pas la validité.

    essaie de faire tourner ton algo aujourd'hui (17/04/2007) avec la date du 21/04/2000... ca ne fonctionne pas car 21 > 17

    Vérifier l'antériorité pourrait se faire comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ok = false;
    if($annee < date('Y')) {
      ok = true;
    } else if($annee == date ('Y') && $mois < date('m')) {
      ok = true;
    } else if($mois == date('m') && $jour <= date('d')) {
      ok = true;
    }
    ok == true ? 'date antérieure ou égale' : 'date supérieure';
    mais vérifier la validité d'une date est beaucoup plus galère à cause des années bisextiles

  6. #6
    Membre chevronné Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Par défaut
    essaie de faire tourner ton algo aujourd'hui (17/04/2007) avec la date du 21/04/2000... ca ne fonctionne pas car 21 > 17
    C'est pourtant ce que j'ai compris que tu voulais dans ton message :
    non, la finalité de mon test est de vérifier qu'une date saisie est :
    - valide
    - antérieure à la date du jour
    ???

  7. #7
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Checkdate ?
    http://www.php.net/manual/fr/function.checkdate.php

    Apres, te suffit de faire un calcul :
    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
    // Format de $date1 et $date2 : jj/mm/aaaa
    // Valeurs de retour :
    // 1 si $date1 > $date2
    // 0 si $date1 = $date2
    // -1 si $date1 < $date2
    // NULL si erreur
    function compareDates($date1, $date2)
    {
    	if( !preg_match('^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$, $date1, $match1) || !preg_match('^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$, $date2, $match2) )
    	{
    		return NULL;
    	}
     
    	$jj1 = $match1[1];
    	$mm1 = $match1[2];
    	$aaaa1 = $match1[3];
     
    	$jj2 = $match2[1];
    	$mm2 = $match2[2];
    	$aaaa2 = $match2[3];
     
    	if( $aaaa1 < $aaaa2 )
    		return -1;
    	else if( $aaaa1 > $aaaa2 )
    		return 1;
     
    	if( $mm1 < $mm2 )
    		return -1;
    	else if( $mm1 > $mm2 )
    		return 1;
     
    	if( $jj1 < $jj2 )
    		return -1;
    	else if( $jj1 > $jj2 )
    		return 1;
     
    	return 0;
    }

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

Discussions similaires

  1. [Dates] probleme date php
    Par flydragon dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2006, 17h56
  2. [Dates] [php]Test de dates
    Par samjung dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 17h00
  3. [Dates] [PHP/HTML/WEB] - Afficher le nom du jour dans la date
    Par fredhali2000 dans le forum Langage
    Réponses: 14
    Dernier message: 26/01/2006, 11h13
  4. VB/EXCEL/DATES/PHP
    Par JBLCN dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/08/2005, 08h32

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