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] Conversion de date


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut [Dates] Conversion de date
    Bonjour,

    Je récupère un flux RSS américain avec dans l'élément <pubDate> la date suivante :
    <pubDate>Mon, 17 Nov 2008 17:00:00 -0800</pubDate>

    Lorsque je l'insère dans ma base je voudrais récupérer la date telle quelle sans conversion (enfin formatée en 'Y-m-d h:i:s'). Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date( 'Y-m-d h:i:s', strtotime($date))
    J'obtiens "2008-11-18 02:00:00".
    Si je tente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strftime( '%Y-%m-%d %H:%M:%S', strtotime($date) )
    J'obtiens la même chose.
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gmstrftime( '%Y-%m-%d %H:%M:%S', strtotime($date) )
    J'obtiens "2008-11-18 01:00:00" (une heure de moins).

    Je me suis dit que j'allais rajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_TIME,'en_US')
    pour voir. Eh bien rien ne change.

    Si quelqu'un a une idée ?

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Que souhaites-tu avoir comme date ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    2008-11-17 17:00:00

  4. #4
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Mais tu veux la date inscrite dans le flux ou la date actuelle ?

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ca correspond à quoi le -0800 ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Ca correspond à quoi le -0800 ?
    GMT-8 heures je pense...

    Ce qui expliquerai que ta date "Mon, 17 Nov 2008 17:00:00 -0800" se transforme en "2008-11-18 02:00:00". C'est l'heure française correspondante (9 heures de décalage.)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    C'est exactement ce que je me suis dit.
    Mais alors comment faire pour récupérer la date du flux sans conversion en date et heure française ?


    J'imagine que vous allez me dire qu'il faut que je soustrais 8h à la date convertie !

  8. #8
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Tiens à toi d'adapter "$tab" :
    Code php : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    $rss = 'Mon, 17 Nov 2008 17:00:00 -0800';
    $tab = substr($rss, 0, 25);
    $str = explode(" ", $tab);
    $str2 = strtotime($tab);
     
    $lang = array(
    'DATE_JANUARY' => 'Janvier',
    'DATE_FEBRUARY' => 'Février',
    'DATE_MARCH' => 'Mars',
    'DATE_APRIL' => 'Avril',
    'DATE_MAY' => 'Mai',
    'DATE_JUNE' => 'Juin',
    'DATE_JULY' => 'Juillet',
    'DATE_AUGUST' => 'Aout',
    'DATE_SEPTEMBER' => 'Septembre',
    'DATE_OCTOBER' => 'Octobre',
    'DATE_NOVEMBER' => 'Novembre',
    'DATE_DECEMBER' => 'Décembre',
    'DATE_MONDAY' => 'Lundi',
    'DATE_TUESDAY' => 'Mardi',
    'DATE_WEDNESDAY' => 'Mercredi',
    'DATE_THURSDAY' => 'Jeudi',
    'DATE_FRIDAY' => 'Vendredi',
    'DATE_SATURDAY' => 'Samedi',
    'DATE_SUNDAY' => 'Dimanche'
    );
    function dates($timestamp,$model,$lang)
    {
    	// timestamp = la date a formater en base de timestamp unix
    	// model = le modèle remplace des variables standards par leur valeur
    	// exemple : pour une date "Mercredi 31 Juillet 2008 à 21:30"
    	// le modele sera : "{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"
    	// il est complètement modulable
    	// lang = le fichier de langue courant
     
    	// tableau de base
    	$transDate = array(
    	'SEC' => date('s',$timestamp),
    	'MIN' => date('i',$timestamp),
    	'HOUR' => date('H',$timestamp),
    	'DAY' => date('d',$timestamp),
    	'MONTH' => date('m',$timestamp),
    	'LONG_YEAR' => date('Y',$timestamp),
    	'SHORT_YEAR' => date('y',$timestamp),
    	'LONG_DAY' => $lang['DATE_'.strtoupper(date('l',$timestamp))],
    	'SHORT_DAY' => substr($lang['DATE_'.strtoupper(date('l',$timestamp))],0,3),
    	'LONG_MONTH' => $lang['DATE_'.strtoupper(date('F',$timestamp))],
    	'SHORT_MONTH' => substr($lang['DATE_'.strtoupper(date('F',$timestamp))],0,4),
    	);
     
    	// remplacements dans le modele
    	$model = str_replace('{SEC}',$transDate['SEC'],$model);
    	$model = str_replace('{MIN}',$transDate['MIN'],$model);
    	$model = str_replace('{HOUR}',$transDate['HOUR'],$model);
    	$model = str_replace('{DAY}',$transDate['DAY'],$model);
    	$model = str_replace('{MONTH}',$transDate['MONTH'],$model);
    	$model = str_replace('{LONG_YEAR}',$transDate['LONG_YEAR'],$model);
    	$model = str_replace('{SHORT_YEAR}',$transDate['SHORT_YEAR'],$model);
    	$model = str_replace('{LONG_DAY}',$transDate['LONG_DAY'],$model);
    	$model = str_replace('{SHORT_DAY}',$transDate['SHORT_DAY'],$model);
    	$model = str_replace('{LONG_MONTH}',$transDate['LONG_MONTH'],$model);
    	$model = str_replace('{SHORT_MONTH}',$transDate['SHORT_MONTH'],$model);
     
    	// retour
    	return $model;
    }
    echo dates($str2, "{LONG_YEAR}-{MONTH}-{DAY} {HOUR}:{MIN}:{SEC}", $lang);

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Celira Voir le message
    GMT-8 heures je pense...
    Ma question n'était pas si innocente que cela : avant de se demander comment convertir une donnée, il faut absolument comprendre sa valeur et sa structure.

    Donc il ne faut pas seulement supputer qu'il s'agit de GMT -8h, il faut en être sûr.

  10. #10
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
      $pubDate = 'Mon, 17 Nov 2008 17:00:00 -0800';
      //-- suppression du décalage horaire -------------------------------------
      $date = substr($pubDate, 0, strrpos($pubDate, ' '));
      //-- formatage de la date et heure ---------------------------------------
      $date = date('Y-m-d H:i:s', strtotime($date));
      echo $date;
    ?>
    Ce code affiche : 2008-11-17 17:00:00.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    Magnifique.
    Jeca, ta solution fonctionne parfaitement.
    Dommage qu'il faille supprimer le -0800.

    Enfin les conversion de dates et de caractères, c'est ce qu'il y a de pire ! Pour moi bien sûr

    Merci à tous

  12. #12
    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
    Citation Envoyé par dafalri Voir le message
    Dommage qu'il faille supprimer le -0800.
    Si tu veux le récupérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
      $pubDate = 'Mon, 17 Nov 2008 17:00:00 -0800';
      //-- récupération du décalage horaire ------------------------------------
      $offset = substr($pubDate, strrpos($pubDate, ' '));
      //-- suppression du décalage horaire -------------------------------------
      $date = substr($pubDate, 0, strrpos($pubDate, ' '));
      //-- formatage de la date et heure ---------------------------------------
      $date = date('Y-m-d H:i:s', strtotime($date)) . ' ' . $offset;
      echo $date;
    ?>
    affiche : 2008-11-17 17:00:00 -0800

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut

    Non je ne veux pas le récupérer. Je pensais juste qu'avec toutes les fonctions de date disponibles en php il y en avait sûrement une qui permettait de prendre une date telle quelle sans conversion.

  14. #14
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Je rêve ou je rêve, je t'ai donné une solution te permettant de formater les dates comme tu veux et tu n'en tiens pas compte

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    La vie n'est qu'un rêve permanent ! (pfff c'est n'importe quoi cette phrase)

    C'est clair que ta solution est plus complète mais je t'avoue que sur ce coup j'ai choisi la facilité. Surtout que je sui tombé sur un cas particulier qui ne se reproduira pas de si tôt.

    MERCI NEIGEBLEUE

  16. #16
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    C'est GLACE BLEUE !

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    Je préfère neige, c'est plus festif ! Et c'est de saison !

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

Discussions similaires

  1. [Dates] Conversion de dates
    Par gandolfi dans le forum Langage
    Réponses: 2
    Dernier message: 21/09/2008, 22h42
  2. [Dates] conversion de date
    Par wincroc dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2007, 10h19
  3. Conversion de date GMT en date locale
    Par mayayu dans le forum C
    Réponses: 10
    Dernier message: 17/05/2007, 15h23
  4. [Dates] Conversion de date : anglophone vers francophone
    Par groupejtt dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2006, 11h54
  5. [Dates] Conversion de date (type mktime en date normale)
    Par jeff&&php dans le forum Langage
    Réponses: 6
    Dernier message: 17/05/2006, 15h27

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