Ce que nous devons savoir, c'est comment la date est stockée dans le SQL. Est-ce Timestamp ou Datetime ou unixtime?
Ólafur Waage
Ils ne sont pas stockés en temps Unix, tout comme une date normale, PHP est celui qui les traite comme des secondes et d'autres choses. Je vous recommande d'utiliser les OOPfonctions PHP datetime, elles sont très faciles à utiliser.
Gucho Ca
2
Puis-je recommander et remplacer votre format de date? mm/dd/yyest très américain, et ceux d'entre nous qui vivent dans d'autres parties du monde deviennent plus qu'un peu irritables en essayant de deviner ce que l'on entend par 11-12-13. La norme la plus universelle est yyyy-mm-ddet fait partie de la norme ISO 8601. A défaut, vous devez utiliser le nom du mois , pas le numéro.
Manngo
Réponses:
515
Si vous cherchez un moyen de normaliser une date au format MySQL, utilisez ce qui suit
La ligne $phpdate = strtotime( $mysqldate )accepte une chaîne et effectue une série d'heuristiques pour transformer cette chaîne en horodatage Unix.
La ligne $mysqldate = date( 'Y-m-d H:i:s', $phpdate )utilise cet horodatage et la datefonction de PHP pour remettre cet horodatage au format de date standard de MySQL.
( Note de l'éditeur : cette réponse est ici en raison d'une question originale avec un libellé confus et de l'utilité générale de Google que cette réponse a fournie même si elle n'a pas répondu directement à la question qui existe maintenant)
@ 0xBAADF00D: veuillez relire la question ... personne n'a posé de questions sur le format standard MySQL.
user7116
3
bien sûr, mais, lorsque le standard existe, il peut être agréable de suivre le standard (cela évite les maux de tête plus tard lorsqu'un autre développeur travaille sur votre code) xD
0xBAADF00D
4
La question demande de sortir au format mm / jj / aa H: M (AM / PM), pas "Ymd H: i: s".
Rikki
6
does not workpour qui? La réponse acceptée fonctionnera si vous souhaitez convertir de MySQL en mm / jj / aa H: M (AM / PM) comme OP l'a demandé. Ce n'est pas parce que vous voulez faire le contraire que la réponse acceptée est fausse.
toxalot
311
Pour convertir une date récupérée de MySQL au format demandé ( mm/dd/yy H:M (AM/PM)):
Je peux me tromper, mais je pense que certains d'entre vous manquent de raison. Il souhaite que la sortie soit au format "m / d / yg: i A", en tirant la date d'origine d'un champ DATETIME. Donc, son code fonctionne. @Mike $ row-> createdate n'est que la colonne datetime de Tim.
Mere Development
4
La réponse @AsTeR ne prête à confusion que si vous avez mal lu la question. OP a répondu à sa propre question et veut prendre une date de MySQL et la sortie au format demandé: mm / jj / aa H: M (AM / PM) .
toxalot
@TimBoland Je pense que la réponse pourrait être améliorée si de a été soulignée, ainsi que le format demandé mm / jj / aa H: M (AM / PM) . Et il pourrait bénéficier d'un lien vers la fonction date. J'ai essayé de suggérer une modification , mais elle a été rejetée.
toxalot
1
Fait amusant: cette réponse est à peu près équivalente à celle juste en dessous (qui n'a pratiquement pas de downvotes), mais elle a obtenu> 40 downvotes car elle répond à la question du PO, qui diffère de celle que les personnes qui viennent sur cette page ont réellement.
Clément
110
Si vous utilisez PHP 5, vous pouvez également essayer
Je pense que les gens downvote parce qu'ils sont confus au sujet de la question OP. La plupart lisent la question comme étant l'opposé de ce qu'elle est réellement. L'autre possibilité est que cela est très similaire à la réponse acceptée qui a été publiée il y a 5+ ans.
toxalot
1
Le lien que vous référencez ne pointe pas vers la fonction que vous utilisez, ni n'explique le format. Je pense que php.net/function.date.php serait mieux.
toxalot
@toxalot La réponse acceptée est incorrecte. Il a été modifié après ma réponse et à propos de mon lien, je remplace votre lien. Merci
Tony Stark
1
Ce Q&A entier a une histoire sordide. La réponse acceptée était incorrecte entre le 29 avril 2013 et le 24 mai 2013. Elle était correcte lorsque vous avez publié votre réponse pour la première fois. Votre réponse était fausse jusqu'au 29 mai 2013, après quoi elle est devenue très similaire à la réponse acceptée.
toxalot
23
Enfin la bonne solution pour PHP 5.3 et supérieur:
(ajout du fuseau horaire optionnel à l'exemple comme mentionné dans les commentaires)
son erreur .. Classe 'App \ Controller \ DateTime' introuvable .. en utilisant php 6.4
aswzen
1
Si vous travaillez dans un autre espace de noms, vous devez l'appeler avec une barre oblique inverse devant lui:\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
Hasenpriester
2
N'oubliez pas de spécifier le fuseau horaire lorsque vous créez votre objet date! Sinon, votre date formatée pourrait être de plusieurs heures de congé. Vos datetimecolonnes doivent être UTF8, passez donc new DateTimeZone('UTC')le 3ème paramètre pour vous assurer que PHP le sait.
Eric Seastrand
Ceci est la bonne réponse qui génère le format souhaité de l'OP, il suffit de prendre soin des fuseaux horaires
Si vous préférez le faire en PHP, vous avez besoin de la fonction date , mais vous devrez d'abord convertir la valeur de votre base de données en horodatage.
-1 car le formatage de la date dans DB n'est pas une bonne idée. Le Web multilingue a besoin de différents formats de date et vous devez ensuite formater la date en PHP (langage de logique métier en commun). Lorsque vous avez écrit sur la datefonction, vous devez également écrire sur la strottimefonction pour aider quelqu'un au lieu de "mais vous devrez d'abord convertir la valeur de votre base de données en horodatage".
Pour formater correctement un DateTimeobjet en PHP pour le stocker dans MySQL, utilisez le format standardisé utilisé par MySQL, qui est ISO 8601 .
PHP a ce format stocké en tant que constante depuis la version 5.1.1, et je recommande fortement de l'utiliser plutôt que de taper manuellement la chaîne à chaque fois.
MySQL n'utilise pas réellement ce format, et MySQL génère un avertissement si vous incluez l'indicateur de fuseau horaire "+ xxxx" qui est généré par lui. UPDATE X SET Y = '2014-03-31T15: 00: 00 + 0100' où Z; Requête OK, 0 lignes affectées, 1 avertissement (0,06 sec) Lignes correspondantes: 1 Modifié: 0 Avertissements: 1
George Lund
OP veut prendre une date au format MySQL et la convertir en mm / jj / aa H: M (AM / PM) .
toxalot
8
Cela devrait mettre en forme un champ dans une requête SQL:
SELECT DATE_FORMAT(`fieldname`,'%d-%m-%Y') FROM tablename
Vous devez spécifier la requête MySQL , pas seulement SQL, car cela ne fonctionnera pas nécessairement avec toutes les bases de données. Bien qu'OP ait demandé une solution PHP, c'est une bonne alternative que OP ne connaissait peut-être pas. Cependant, cela ne fournira pas le format demandé. Pour obtenir le format OP demandé, vous auriez besoin '%m/%d/%y %h:%i %p'.
Cela ne répond pas à la question OP. OP veut prendre une date au format MySQL et la convertir en mm / jj / aa H: M (AM / PM) . De plus, cela formatera simplement l'heure actuelle, pas une date spécifique.
toxalot
5
SELECT
DATE_FORMAT(demo.dateFrom,'%e.%M.%Y')as dateFrom,
DATE_FORMAT(demo.dateUntil,'%e.%M.%Y')as dateUntil
FROM demo
Si vous ne voulez pas changer chaque fonction de votre code PHP, pour afficher le format de date attendu, changez-le à la source - votre base de données.
Il est important de nommer les lignes avec l' comme opérateur comme dans l'exemple ci - dessus (comme dateFrom, comme dateUntil). Les noms que vous écrivez sont les noms, les lignes seront appelées dans votre résultat.
La sortie de cet exemple sera
[Jour du mois, numérique (0..31)]. [Nom du mois (janvier..décembre)]. [Année, numérique, quatre chiffres]
Exemple: 5 août 2015
Modifiez les points avec le séparateur de votre choix et vérifiez la fonction DATE_FORMAT (date, format) pour plus de formats de date.
Vous pouvez également demander à votre requête de renvoyer l'heure sous forme d'horodatage Unix. Cela éliminerait le besoin d'appeler strtotime()et rendrait les choses un peu moins intensives du côté PHP ...
select UNIX_TIMESTAMP(timsstamp)as unixtime from the_table where id =1234;
Ensuite, en PHP, utilisez simplement la date()fonction pour le formater comme vous le souhaitez.
<?php
echo date('l jS \of F Y h:i:s A', $row->unixtime);?>
ou
<?php
echo date('F j, Y, g:i a', $row->unixtime);?>
J'aime cette approche plutôt que d'utiliser la fonction de MySQLDATE_FORMAT , car elle vous permet de réutiliser la même requête pour récupérer les données et vous permet de modifier la mise en forme en PHP.
C'est ennuyeux d'avoir deux requêtes différentes juste pour changer l'apparence de la date dans l'interface utilisateur.
J'aime l'idée d'utiliser UNIX_TIMESTAMPpour éliminer le besoin de strtotime. Cette réponse serait meilleure si elle donnait un exemple de formatage de l'heure au format OP effectivement demandé.
toxalot
1
Vous pouvez avoir des problèmes avec les dates non retournées dans l'horodatage Unix, donc cela fonctionne pour moi ...
return date("F j, Y g:i a", strtotime(substr($datestring,0,15)))
Cela ne convertit pas la date au format demandé par OP
toxalot
0
L'approche que je propose fonctionne comme la suivante. Tout d'abord, vous créez un objet datetime de base à partir d'une chaîne au format mysql; puis vous le formatez comme vous le souhaitez. Heureusement, mysql datetime est conforme à la norme ISO8601, donc le code lui-même pourrait sembler assez simple et élégant. Gardez à l'esprit que cette datetimecolonne n'a pas d'informations de fuseau horaire, vous devez donc les convertir de manière appropriée .
Voici le code:
(new ISO8601Formatted(newFromISO8601('2038-01-19 11:14:07'),'m/d/Y h:iA'))->value();
Il produit 01/19/2038 11:14AM- j'espère ce que vous attendez.
Cet exemple utilise la bibliothèque meringue. Vous pouvez en découvrir un peu plus si vous le souhaitez.
Cela ne répond pas à la question OP. OP veut prendre une date au format MySQL et la convertir en mm / jj / aa H: M (AM / PM) . Cela fait le contraire. De plus, il prend l'entrée d'un formulaire plutôt que de la base de données.
OOP
fonctions PHP datetime, elles sont très faciles à utiliser.mm/dd/yy
est très américain, et ceux d'entre nous qui vivent dans d'autres parties du monde deviennent plus qu'un peu irritables en essayant de deviner ce que l'on entend par11-12-13
. La norme la plus universelle estyyyy-mm-dd
et fait partie de la norme ISO 8601. A défaut, vous devez utiliser le nom du mois , pas le numéro.Réponses:
Si vous cherchez un moyen de normaliser une date au format MySQL, utilisez ce qui suit
La ligne
$phpdate = strtotime( $mysqldate )
accepte une chaîne et effectue une série d'heuristiques pour transformer cette chaîne en horodatage Unix.La ligne
$mysqldate = date( 'Y-m-d H:i:s', $phpdate )
utilise cet horodatage et ladate
fonction de PHP pour remettre cet horodatage au format de date standard de MySQL.( Note de l'éditeur : cette réponse est ici en raison d'une question originale avec un libellé confus et de l'utilité générale de Google que cette réponse a fournie même si elle n'a pas répondu directement à la question qui existe maintenant)
la source
does not work
pour qui? La réponse acceptée fonctionnera si vous souhaitez convertir de MySQL en mm / jj / aa H: M (AM / PM) comme OP l'a demandé. Ce n'est pas parce que vous voulez faire le contraire que la réponse acceptée est fausse.Pour convertir une date récupérée de MySQL au format demandé (
mm/dd/yy H:M (AM/PM)
):Reportez-vous aux options de formatage de date PHP pour ajuster le format.
la source
$row
objet est-il censé provenir?Si vous utilisez PHP 5, vous pouvez également essayer
la source
("Y-m-d H:i:s")
Référence: http://php.net/manual/en/function.date.php
la source
Enfin la bonne solution pour PHP 5.3 et supérieur: (ajout du fuseau horaire optionnel à l'exemple comme mentionné dans les commentaires)
la source
\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
datetime
colonnes doivent être UTF8, passez doncnew DateTimeZone('UTC')
le 3ème paramètre pour vous assurer que PHP le sait.Un moyen plus simple serait de formater la date directement dans la requête MySQL, au lieu de PHP. Voir l' entrée manuelle MySQL pour DATE_FORMAT .
Si vous préférez le faire en PHP, vous avez besoin de la fonction date , mais vous devrez d'abord convertir la valeur de votre base de données en horodatage.
la source
date
fonction, vous devez également écrire sur lastrottime
fonction pour aider quelqu'un au lieu de "mais vous devrez d'abord convertir la valeur de votre base de données en horodatage".Oublie tout. Utilisez simplement:
la source
Pour formater correctement un
DateTime
objet en PHP pour le stocker dans MySQL, utilisez le format standardisé utilisé par MySQL, qui est ISO 8601 .PHP a ce format stocké en tant que constante depuis la version 5.1.1, et je recommande fortement de l'utiliser plutôt que de taper manuellement la chaîne à chaque fois.
Ceci et une liste d'autres constantes PHP DateTime sont disponibles sur http://php.net/manual/en/class.datetime.php#datetime.constants.types
la source
Cela devrait mettre en forme un champ dans une requête SQL:
la source
'%m/%d/%y %h:%i %p'
.Utilisez la fonction date :
la source
Selon votre configuration de datetime MySQL. Typiquement: 2011-12-31 au format 07:55:13 . Cette fonction très simple devrait faire la magie:
Ou un peu plus d'avance pour répondre à la question.
la source
Si vous ne voulez pas changer chaque fonction de votre code PHP, pour afficher le format de date attendu, changez-le à la source - votre base de données.
Il est important de nommer les lignes avec l' comme opérateur comme dans l'exemple ci - dessus (comme dateFrom, comme dateUntil). Les noms que vous écrivez sont les noms, les lignes seront appelées dans votre résultat.
La sortie de cet exemple sera
[Jour du mois, numérique (0..31)]. [Nom du mois (janvier..décembre)]. [Année, numérique, quatre chiffres]
Exemple: 5 août 2015
Modifiez les points avec le séparateur de votre choix et vérifiez la fonction DATE_FORMAT (date, format) pour plus de formats de date.
la source
Vous pouvez également demander à votre requête de renvoyer l'heure sous forme d'horodatage Unix. Cela éliminerait le besoin d'appeler
strtotime()
et rendrait les choses un peu moins intensives du côté PHP ...Ensuite, en PHP, utilisez simplement la
date()
fonction pour le formater comme vous le souhaitez.ou
J'aime cette approche plutôt que d'utiliser la fonction de MySQL
DATE_FORMAT
, car elle vous permet de réutiliser la même requête pour récupérer les données et vous permet de modifier la mise en forme en PHP.C'est ennuyeux d'avoir deux requêtes différentes juste pour changer l'apparence de la date dans l'interface utilisateur.
la source
UNIX_TIMESTAMP
pour éliminer le besoin destrtotime
. Cette réponse serait meilleure si elle donnait un exemple de formatage de l'heure au format OP effectivement demandé.Vous pouvez avoir des problèmes avec les dates non retournées dans l'horodatage Unix, donc cela fonctionne pour moi ...
la source
Cela fonctionnera ...
la source
En utilisant PHP version 4.4.9 et MySQL 5.0, cela a fonctionné pour moi:
PubDate
est la colonne de MySQL .la source
L'approche que je propose fonctionne comme la suivante. Tout d'abord, vous créez un objet datetime de base à partir d'une chaîne au format mysql; puis vous le formatez comme vous le souhaitez. Heureusement, mysql datetime est conforme à la norme ISO8601, donc le code lui-même pourrait sembler assez simple et élégant. Gardez à l'esprit que cette
datetime
colonne n'a pas d'informations de fuseau horaire, vous devez donc les convertir de manière appropriée .Voici le code:
Il produit
01/19/2038 11:14AM
- j'espère ce que vous attendez.Cet exemple utilise la bibliothèque meringue. Vous pouvez en découvrir un peu plus si vous le souhaitez.
la source
la source