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] timestamp du 08/01/2007 bizarre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut [Dates] timestamp du 08/01/2007 bizarre
    Bonjour à tous,

    en tant que bidouilleur débutant en php j'ai besoin de vos lumières svp.

    Voila je souhaite creer une condition en comparant un timestamp de début, de fin et un timestamp d'évènement.
    Pas compliqué, sauf que je m'aperçois que le timestamp du 01/08/2007 (premier août de cette année) m'affiche celui du 01/12/2006 (permier décembre 2006)
    voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $mois_debut=08;
    $jour_debut=01;
    $annee_debut=2007;
     
    $timest_debut= mktime(0,0,0,$mois_debut,$jour_debut,$annee_debut);
     
    $timest_debut=date("Y-m-j","$timest_debut");
     
    echo $timest_debut;
    m'affiche : 2006-12-1

    A n'y rien comprendre, sauf qu'en bidouillant les dates je m'aperçois que si à la place de "08" en mois je met "8" tout court ça marche....
    Je comprends pas pourquoi et surtout j'aimerais que ça fonctionne avec "08" !
    Si vous voyez une solution et un explication ...
    En vous remerciant par avance

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Cela vient des 0 que tu as mis dans 01 et 08. Si tu veux garder les 0 il faut entourer la valeur de " "
    Sinon retires les zéros.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut
    Citation Envoyé par koopajah
    Cela vient des 0 que tu as mis dans 01 et 08. Si tu veux garder les 0 il faut entourer la valeur de " "
    Sinon retires les zéros.
    merci de me répondre.

    ça vient des zeros oui, sauf que les zeros ne posent probleme que pour le mois d'aout et de septembre.
    Autrement dit pour les aurtes mois en 0 : de janvier à juin, qu'il y ait 01 ou 1, ou bien 06 ou 6 c'est pareil !!!
    incompréhensible.
    De plus je ne peux pas entourer la valeur de " " car en fait je la recupere d'une base de données (par un explode("-"),$donnees['date']).
    Bref je me suis donc debrouillé en faisant un switch 08=8 et 09=9 mais quand même j'arrive pas à comprendre pourquoi le timestamp de (0,0,0,08,01,2007) et celui du (0,0,0,09,01,2007) me donne celui du (0,0,0,12,01,2006) !

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    le probleme vient de la conversion, je comprenais pas ce qui se passait en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val = intval(08); => ca donne 0
    mais ca vient de la conversion de base numérique implicite, cf la doc de intval :

    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
    <?php
    echo intval(42);                      // 42
    echo intval(4.2);                     // 4
    echo intval('42');                    // 42
    echo intval('+42');                   // 42
    echo intval('-42');                   // -42
    echo intval(042);                     // 34
    echo intval('042');                   // 42
    echo intval(1e10);                    // 1410065408
    echo intval('1e10');                  // 1
    echo intval(0x1A);                    // 26
    echo intval(42000000);                // 42000000
    echo intval(420000000000000000000);   // 0
    echo intval('420000000000000000000'); // 2147483647
    echo intval(42, 8);                   // 42
    echo intval('42', 8);                 // 34
    ?>

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut
    OMG
    la j'atteinds mes limites !
    je comprends pas du tout mais d'après les donnes que tu me donnes il faudrait que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois_debut=" ' ".$mois_debut." ' ";
    ou quelque chose comme ça pour que ça marche ?
    mais j'ai un message :
    Warning: mktime() expects parameter 4 to be long, string given in chemin\fichier.php on line 7
    bon sinon pas la peine de trop chercher puisque je m'en sort avec le switch mais ça me parait très bizarre et pas logique...
    En tout cas merci d'avoir cherché, je me suis pas trop trompé si ça vient "de la conversion de la base numérique implicite" c'est à cause du php lui-même si je comprends bien

  6. #6
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par naevar
    En tout cas merci d'avoir cherché, je me suis pas trop trompé si ça vient "de la conversion de la base numérique implicite" c'est à cause du php lui-même si je comprends bien
    Pas de PHP lui meme mais de la convention qui veut qu'un nombre qui commence par 0x soit en hexadécimal et un nombre qui commence par 0 est en octal (base 8)

    Or 0 à 7 en base 8 ca vaut 0 à 7 en décimal, mais 8 en base 8 ca n'existe pas, donc 08 est un nombre qui n'existe pas en gros.

    Le mieux est de remplacer dans ta chaine les "premiers 0" par "rien" pour transfortmer 00008 en 8 quoi.

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

Discussions similaires

  1. Choix du format de date timestamp Mysql ou timestamp Unix
    Par audreyc dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/04/2009, 07h20
  2. [Dates] Transformation timestamp en h:m:s bizarre
    Par Kahlyv dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2007, 09h32
  3. Conversion date (timestamp)
    Par flipper203 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 26/10/2006, 15h30
  4. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

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