Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/04/2011, 12h54   #1
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
Par défaut modifier format de date

Bonjour,

Question qui doit revenir souvent, mais malgré les différents solutions trouvées sur notre ami google, je n'arrive pas à convertir ma date.

je reçois une date dans le format 'dd/mm/yy HH24:MI' et j'aimerais la convertir au format 'yyyy-mm-dd HH:MM:SS'.

Une solution ?

Merci.
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 12h56   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Beh la fonction date() est faite pour cela.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 13h36   #3
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
En php 5.3 :

Code :
1
2
$date = DateTime::createFromFormat('d/m/Y h:i',$madate);
echo $date->format('Y-m-d H:i:s');
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 13h39   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
PLutot strtotime() puis date()
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h16   #5
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
je ne comprends pas, ça ne fonctionne pas, ça plante même

mon code :
Code :
1
2
3
 
$date = DateTime::createFromFormat('d/m/Y h:i',$response['transaction']['date']);
$dp->datePaiement = $date->format('Y-m-d H:i:s');
J'obtiens l'erreur : Fatal error: Call to a member function format() on a non-object

Où puis-je me tromper ?

Merci.
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h37   #6
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
en fait, je cherche à formater une date de la façon suivante :
je récupère une date avec son propre format, et donc je veux la transformer dans le format souhaité.

la fonction date::format() permet de formater comme on veut une date du type '2000-01-01'...
quand je fais des test avec une année sur 2, il ne sait pas quelle zone est l'année ...
donc ça ne fonctionne pas ...

Une solution existe pour cela ?
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h52   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
quand je fais des test avec une année sur 2, il ne sait pas quelle zone est l'année ...
Pour PHP :
70->100 c'est 1970->2000
00->69 c'est 2000->2069
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h55   #8
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
ok mais mon problème persiste :
ma date a le format dd/mm/yy

je transforme le '/' en '-' puis le code suivant :
Code :
1
2
3
 
$date = new DateTime('14-01-11 12:20');
echo $date->format('Y-m-d H:i:s');
Résultat : 2014-01-11 12:20:00

alors que souhaite obtenir : 14-01-2011 12:20:00.

C'est pour ça que je cherche une solution à laquelle on donne le format d'entrée.

Merci.
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h11   #9
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Le soucis doit venir du fait qu'il n'interprète pas la date correctement. (UE/US)
As-tu essayé en passant par strtotime() puis date() ?
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h18   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
C'est pour ça que je cherche une solution à laquelle on donne le format d'entrée.
Ca n'existe pas nativement, c'est a toi de transformer ta date dans un format reconnu par php (a base de explode).
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h20   #11
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
oui j'ai essayé, le problème reste identique :
Code :
1
2
$date =  strtotime("14-01-11 12:20");
echo date('Y-m-d H:i:s', $date);
résultat affiché : 2014-01-11 12:20:00

alors que mon année est 2011 ...
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h44   #12
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Et avec ça :
Code php :
1
2
$date =  strtotime(str_replace('-','/',"14-01-11 12:20"));
echo date('Y-m-d H:i:s', $date);
Car - est pour les dates US il me semble, donc cela porte à confusion.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h49   #13
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
non ça ne fonctionne pas, il n'accepte pas le '/'.

le problème, c'est comment lui dire que l'année et 11 et pas 14 ??
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 17h33   #14
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
oui j'ai essayé, le problème reste identique :
Ton format de date n'est pas bon, tu dois avoir Y-m-d
exemple
http://php.developpez.com/faq/langag...tes#date_fr2en
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 18h00   #15
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
je ne maîtrise pas le format de la date en entrée, soit dd/mm/yy ...
c'est une valeur que je reçois et que je souhaite enregistrer dans MySql au formaat yyyy-mm-jj ...
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 21h02   #16
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
je ne maîtrise pas le format de la date en entrée, soit dd/mm/yy ...
C'est pour ca qu'on arrête pas de te dire de la convertir.

Avec mysql tu as STR_TO_DATE() pour le faire directement.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 09h50   #17
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
mais j'essaie de la convertir.
je veux l'enregistrer au format '2011-04-11 12:20:00' ... car pour le tri, c'est plus facile...
je ne veux pas enregistrer le format d'entrée dans la base de donnée ...
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h19   #18
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Soyons bourrin si tu es sûr qu'à chaque fois la date reçue sera du même format :

Code :
1
2
3
4
5
6
<?php
$receivedDate = "31/12/11 11:32"; // la date reçue
preg_match('#(\d{2})/(\d{2})/(\d{2}) (\d{2}):(\d{2})#', $receivedDate, $match); // on cherche les éléments via regexp (that's bad !)
list($receivedDate, $day, $month, $year, $hour, $minute) = $match; // on assigne les résultats trouvés dans le regexp aux variables
$date =  strtotime($year."-".$month."-".$day." ".$hour.":".$minute); // on le transforme en "temps"
echo date('Y-m-d H:i:s', $date); // on l'affiche avec le format voulu.
Et oui, je sais, c'est crade Et optimisable (genre ligne 4 et 5 fusionnées)
Mais bon, ça a l'avantage de forcer à avoir le même format et à donner le résultat escompté.

La preuve
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h23   #19
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est plus simple d'utiliser STR_TO_DATE()
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h29   #20
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

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

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
tu peux me fournir un exmple avec str_to_date car avec les recherches que j'ai faites, je ne vois pas comment ça pourrait m'aider...
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h08.


 
 
 
 
Partenaires

Hébergement Web