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] pb sur strtotime


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut [Dates] pb sur strtotime
    Salut,

    dans un script, je fais une différence entre 2 dates :
    strtotime(2006-03-27) - strtotime(2006-02-20))

    le résultat doit être un nombre de secondes. Mais comment se fait-il que ce résultat ne soit pas divisible par 86400 (nombre de secondes dans 1 jour)?

    Merci de votre aide

  2. #2
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    hello,

    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtotime(2006-03-27) - strtotime(2006-02-20)
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtotime('2006-03-27') - strtotime('2006-02-20')
    ???

    parce que ça n'a pas du tout le même sens....


    Avant de faire des calculs, le plus simple est d'essayer de voir comment PHP interprète ta date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo date( 'r', strtotime( 2006-03-27 ) )
    Tu risques d'avoir une suprise là... vu que PHP va traiter ta "date" comme une suite de soustractions... donc 2006 - 3 - 27 = 1976... tu veux qu'il te donne quelle date en partant de ça ?

    Sinon, si tu as la possibilité, essaye d'utilise mktime() au lieu de strtotime().... De même s'il s'agit d'une date MySQL, celui ci fournit une fonction permettant de récupèrer les dates sous forme de timestamp Unix (d'ailleurs il me semble que la fonction se nomme UNIX_TIMESTAMP() )....

  3. #3
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    je viens de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
     
    echo "valeur 1 : ", $valeur1 = strtotime(2006-03-27);
    echo "<br> valeur 2 : ", $valeur2 = strtotime(2006-02-20);
    $valeur = $valeur1-$valeur2;
    echo "<br> résultat : ", $valeur;
     
    ?>

    et on obtient :
    valeur 1 : 1140549360
    valeur 2 : 1140549840
    résultat : -480
    il y a donc un léger souci

  4. #4
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    moi j'obtenais pas -480, mais une autre valeur qui n'était pas modulo 86400 donc pb aussi. et je ne savais pas qu'il fallait utiliser les quotes... je me couherai mon con et avec un script qui tourne...

    Merci de votre aide !!

  5. #5
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Encore un petit truc :

    lorsque je fais : strtotime('$mon_heure'), l'application est hyper ralentie.

    De même je me demande si ce sont des simples ou doubles quotes qu'il faut mettre pour :
    1. le calcul d'heure et de date (=> strtotime(date("Y-m-d", mktime(...))))
    2. les variables contenant des heures ou des dates (strtotime($d))
    3. les variables de session contentant des heures ou des dates (strtotime($_SESSION['heurecourante']))

    Merci de votre aide !

  6. #6
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Quand tu as quelque chose entre simple quote, PHP ne va pas essayer de l'interpréter. Dans le cas des doubles quotes, il va voir dedans s'il y a quelque chose à traiter.

    Par exemple:

    echo '$truc', donnera sur ta page "$page".
    Alors que echo "$truc"; donnera sur ta page le contenu de la variable $truc.

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Pour un article complet :
    http://frederic.bouchery.free.fr/?2004/07/15/2-Les-Chaines-De-Caracteres-Soyons-Coherents

  8. #8
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Si je fais :

    if (((strtotime($datecourant) - strtotime($RES_rvt2[datedebut]))%86400) == 0)

    ça marche pas

    Si je fait

    if (((strtotime("$datecourant") - strtotime("$RES_rvt2[datedebut]"))%86400) == 0)

    ça marche pas

    mais si je fais :
    if (((strtotime(".$datecourant.") - strtotime(".$RES_rvt2[datedebut]."))%86400) == 0)

    ça marche.

    Le problème est que si j'adopte cette dernière version pour tous les scripts utilisant la fonction strtotime, ça fait planter d'autres fonctions et notamment l'ajax qui tourne derrière et qui utilise l'instrution suivante :

    if((strtotime($hdeb) < strtotime($hfin))&&(($ajax_periodique == 0)||(($ajax_periodique > 0)&&(strtotime($ddeb) <= strtotime($dfin))))){...


    J'en perds mon php...

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 31/03/2006, 20h02
  2. [Dates] Warning sur filemtime()
    Par xave dans le forum Langage
    Réponses: 28
    Dernier message: 03/01/2006, 14h16
  3. [OpenOffice][Texte] Comment générer la date automatiquement sur Openoffice.org ?
    Par wareq dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 09/11/2005, 22h41
  4. [Dates] Test sur un champ de formulaire
    Par rdams dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2005, 16h03
  5. [Format Date] erreur sur insertion d'une date
    Par philobedo dans le forum SQL
    Réponses: 4
    Dernier message: 14/06/2005, 10h41

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