J'ai une colonne datetime
dans MySQL.
Comment puis-je le convertir à l'écran en tant que mm/jj/aa H: M (AM/PM) en utilisant PHP?
Pour convertir une date extraite de MySQL au format demandé (mm/dd/yy H:M (AM/PM)
):
// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM
Reportez-vous à options de formatage de la date PHP pour ajuster le format.
Si vous cherchez un moyen de normaliser une date au format MySQL, utilisez ce qui suit
$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
La ligne $phpdate = strtotime( $mysqldate )
accepte une chaîne et effectue une série d'heuristiques pour transformer cette chaîne en un horodatage Unix.
La ligne $mysqldate = date( 'Y-m-d H:i:s', $phpdate )
utilise cet horodatage et la fonction date
de PHP pour rétablir cet horodatage au format de date standard de MySQL.
( Note de l'éditeur : cette réponse est due à une question originale avec une formulation confuse et à l'utilité générale de Google que cette réponse apportait même si elle ne répondait pas directement la question qui existe maintenant)
Si vous utilisez PHP 5, vous pouvez également essayer
$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
$valid_date = date( 'm/d/y g:i A', strtotime($date));
Référence: http://php.net/manual/en/function.date.php
Enfin, la bonne solution pour PHP 5.3 et supérieur:
$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
Un moyen plus simple serait de formater la date directement dans la requête MySQL, au lieu de PHP. Voir le entrée manuelle de 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 un horodatage.
Oublie tout. Il suffit d'utiliser:
$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
Pour formater correctement un objet DateTime
dans PHP, le stockage dans MySQL utilise le format normalisé utilisé par MySQL, à savoir 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.
$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);
Ceci, ainsi qu'une liste d'autres constantes PHP DateTime, sont disponibles à l'adresse http://php.net/manual/fr/class.datetime.php#datetime.constants. types
Cela devrait formater un champ dans une requête SQL:
SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
Utilisez la fonction date :
<?php
echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
En fonction de votre configuration MySQL datetime. Typiquement: 2011-12-31 07:55:13 format. Cette fonction très simple devrait faire la magie:
function datetime()
{
return date( 'Y-m-d H:i:s', time());
}
echo datetime(); // display example: 2011-12-31 07:55:13
Ou un peu plus d'avance pour répondre à la question.
function datetime($date_string = false)
{
if (!$date_string)
{
$date_string = time();
}
return date("Y-m-d H:i:s", strtotime($date_string));
}
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 toutes les fonctions 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'opérateur en tant qu'opérateur , comme dans l'exemple ci-dessus (en tant que dateFrom, en tant que 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
Changer les points avec le séparateur de choix et vérifier 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, dans PHP, utilisez simplement la fonction date()
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, par opposition à l'utilisation de la fonction DATE_FORMAT
de MySQL , car elle vous permet de réutiliser la même requête pour récupérer les données et de modifier le formatage en PHP.
Il est agaçant d’avoir deux requêtes différentes juste pour changer l’apparence de la date dans l’UI.
Vous pouvez avoir des problèmes avec les dates non retournées dans l'horodatage Unix, donc ça marche pour moi ...
return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
Cela fonctionnera ...
echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
En utilisant PHP version 4.4.9 et MySQL 5.0, cela a fonctionné pour moi:
$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate
PubDate
est la colonne dans MySQL .