web-dev-qa-db-fra.com

Conversion de date / heure MySQL vers un autre format avec PHP

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?

420
Tim Boland

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.

294
Tim Boland

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)

491
kta

Si vous utilisez PHP 5, vous pouvez également essayer

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
105
enobrev
$valid_date = date( 'm/d/y g:i A', strtotime($date));

Référence: http://php.net/manual/en/function.date.php

41
Tony Stark

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');
21
Hasenpriester

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.

12
flash

Oublie tout. Il suffit d'utiliser:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
10
nixis

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

9
Greg

Cela devrait formater un champ dans une requête SQL:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
8
riz

Utilisez la fonction date :

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
7
Gustavo Carreno

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));
}
5
tfont
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.

5
Rangel

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.

3
phatduckk

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)))
1
matt.j.crawford

Cela fonctionnera ...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
1
Mihir Vadalia

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 .

0
user216189