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 :

La fonction mktime et données en string


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut La fonction mktime et données en string
    Bonjour à tous,

    Je me trouve face à une colle. Je dois convertir une date et une heure en unix time.
    Je m'explique, dans le formulaire que j'ai mis en place, je demande au visiteur de saisir une date au format JJ/MM/AAAA dans un input, et de saisir une heure au format hh:mm.

    Alors, voici le code que j'ai mis en place :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $datevisite = (!empty ($_POST['datevisite'])) ? strip_tags($_POST['datevisite']) : null;
    $heurevisite = (!empty ($_POST['heurevisite'])) ? strip_tags($_POST['heurevisite']) : null;
    /* création de la date en Unix Time */
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    $datecomplete = date('d-m-Y H:i:s', strtotime($datevisite.' '.$heurevisite));
    $debutvisite  = mktime(date('H', strtotime($datevisite.' '.$heurevisite)), date('i', strtotime($datevisite.' '.$heurevisite)), date('s', strtotime($datevisite.' '.$heurevisite)), date('m', strtotime($datevisite.' '.$heurevisite)), date('d', strtotime($datevisite.' '.$heurevisite)), date('Y', strtotime($datevisite.' '.$heurevisite)));
    $limitconfirm = mktime(date('H', strtotime($datevisite.' '.$heurevisite)), date('i', strtotime($datevisite.' '.$heurevisite)), date('s', strtotime($datevisite.' '.$heurevisite)), date('m', strtotime($datevisite.' '.$heurevisite))-15, date('d', strtotime($datevisite.' '.$heurevisite)), date('Y', strtotime($datevisite.' '.$heurevisite)));

    J'ai également vérifier au niveau des strip_tags, mais cela ne change rien en les retirants.

    Malheureusement, ça ne marche pas, il me sort des zéro tout le temps.

    Par avant, je voulais procéder comme ceci :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $limitconfirm = mktime($heure, $minute, '00', intval($mois), intval($jour)-15, intval($annee));

    Mais j'obtenais un message d'erreur me signalant que le premier paramètre de la fonction mktime devait être de type long, ce qui ne m'arrange pas, car en lisant la doc sur mktime, il exige les dates et les heures avec les 0 initiaux.

    Quelqu'un aurait-il une solution à me proposer permettant de récupérer les unix time correctement, car moi, je sèche (une fois de plus, eh oui).

    En vous remerciant tous pour l'aide que vous pourrez m'apporter, je vous souhaite de passer une bonne après midi.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu t'es emmêlé dans tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite));
    Sinon, il n'y pas d'histoire de zeros initiaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));

  3. #3
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    que donne ceci ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $datevisite = (!empty ($_POST['datevisite'])) ? strip_tags($_POST['datevisite']) : null;
    $heurevisite = (!empty ($_POST['heurevisite'])) ? strip_tags($_POST['heurevisite']) : null;
    $date_heure = trim(strtotime($datevisite.' '.$heurevisite));
     
    $datecomplete = date('d-m-Y H:i:s', $date_heure);
    ...

    EDIT: oui j'avais pas vu ton format, Sabotage a raison. Par contre défini une variable $date_heure afin d'optimiser un peu ton script

  4. #4
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Je viens de tester la solution de sabotage, et j'ai donc le code suivant :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* création de la date en Unix Time */
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    //$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite)); // j'en ai plus besoin
     
    $debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
    $limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));

    Malheureusement, je n'obtiens pas le bon unix time me semble-t-il. J'obtiens ceci :

    1305324000

    En en allant sur le site suivant il me dit que le unix time correspond à :

    Fri, 13 May 2011 22:00:00 GMT

    Alors que dans mon formulaire, j'ai encodé le 14/05/2011 et 14:30 et que d'après le site mentionné ci-dessus, il devrais donc me sortir :

    1305383400

    Il me manque donc 59600, soit 16 h 30 minutes. Alors, la question que je me pose, est-ce que je dois dire que pour aujourd'hui j'ai assez souffert, ou est ce que je continue jusqu'à trouver LA solution à tout mes problèmes ?

    Une fois de plus, je vous remercie pour votre aide.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    sous unix t'as strptime, sinon ça le fait aussi avec strtotime

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par richard_sraing Voir le message

    En en allant sur le site suivant il me dit que le unix time correspond à :

    Fri, 13 May 2011 22:00:00 GMT

    La valeur de ce timestamp est '2011-05-14 00:00:00';

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Chez moi c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $datevisite = '14/05/2011';
    $heuredebut = '14:30';
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    $debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
    echo $debutvisite . "<br/>" . date('d/m/Y H:i:s', $debutvisite);
    1305376200
    14/05/2011 14:30:00

  8. #8
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    J'ai une solution qui fonctionne (à première vue du moins).

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* création de la date en Unix Time */
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    //$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite));
    $debutvisite  = strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite);
    $limitconfirm = $debutvisite - (15 * 24 * 60 * 60);

    En espérant que cela pourra aider l'un ou l'autre qui se perdront sur le forum ...

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Convertir des jours en seconde est une erreur.

  10. #10
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    La valeur de ce timestamp est '2011-05-14 00:00:00';
    En fait, le timestamp sur le site est en GMT, alors que nous nous utilisons le GMT +2 semble-t-il. Cela explique la différence entre la valeur du site, et celle que l'on obtient lors de test sur serveur FR ou autre se trouvant dans une autre zone horaire.

  11. #11
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par richard_sraing Voir le message
    En fait, le timestamp sur le site est en GMT, alors que nous nous utilisons le GMT +2 semble-t-il. Cela explique la différence entre la valeur du site, et celle que l'on obtient lors de test sur serveur FR ou autre se trouvant dans une autre zone horaire.
    euh oui mais là on parle pas en heures mais en mois

  12. #12
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Chez moi c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $datevisite = '14/05/2011';
    $heuredebut = '14:30';
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    $debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
    echo $debutvisite . "<br/>" . date('d/m/Y H:i:s', $debutvisite);
    1305376200
    14/05/2011 14:30:00
    Le code est identique à ce que j'ai poster
    Citation Envoyé par richard_sraing Voir le message
    ...
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* création de la date en Unix Time */
    list( $jour, $mois, $annee) = explode( '/', $datevisite );
    list( $heure, $minute) = explode( ':', $heuredebut );
    //$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite)); // j'en ai plus besoin
     
    $debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
    $limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));
    ...
    Et pourtant, lorsque j'ai fait les tests, cela ne fonctionnait pas, il ne me donnait pas les heures...

    Et sabotage, que veux tu dire en disant
    Citation Envoyé par sabotage Voir le message
    Convertir des jours en seconde est une erreur.

  13. #13
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    euh oui mais là on parle pas en heures mais en mois
    En mois ?

    Pourtant je lis bien "Fri, 13 May 2011 22:00:00 GMT", soit le 14/05/2011 00:00:00 -2 heures, ou est ce que c'est moi qui tourne . Dans le cas contraire, je pense ne pas avoir compris la remarque...

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par richard_sraing Voir le message
    Et sabotage, que veux tu dire en disant
    Citation Envoyé par sabotage
    Convertir des jours en seconde est une erreur.
    un jour c'est pas forcement 24h donc pas forcement 86400 secondes

Discussions similaires

  1. Problème avec la fonction mktime
    Par major2 dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2005, 11h50
  2. Réponses: 15
    Dernier message: 15/12/2005, 15h36
  3. fonction trigger et données
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 17/06/2005, 18h05
  4. [FOP] Changer le bckground en fonction d'une donnée
    Par lasconic dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/02/2005, 17h59
  5. appeler une fonction connaissant son nom (en string)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 20/07/2004, 01h46

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