web-dev-qa-db-fra.com

Formater un horodatage SQL avec PHP

J'ai une base de données MySQL avec un champ d'horodatage. Il n’a actuellement qu’une entrée pendant que je teste, c’est

2010-02-20 13:14:09

Je tire de la base de données et utilise

echo date("m-d-Y",$r['newsDate'])

Mon résultat final montre que

12-31-69

Quelqu'un sait pourquoi?

Edit: Edité: Ne tenez pas compte de cette édition ... l'addon FTP pour le bloc-notes ++ a expiré et, malheureusement, n'affiche pas d'erreur lorsqu'il ne peut pas se synchroniser.

19
Chris Sobolewski

La fonction date attend un horodatage UNIX en tant que deuxième paramètre, ce qui signifie que vous devez convertir la date que vous obtenez de la base de données en un horodatage UNIX, qui peut être effectuée à l'aide de strtotime :

$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);

Et vous aurez:

02-20-2010


Vous passiez la chaîne '2010-02-20 13:14:09' à la fonction date; cette chaîne n'est pas un horodatage UNIX valide.

'12-31-69 'est probablement 1970-01-01, dans vos paramètres régionaux; et 1970-01-01 est l’époque - la date correspondant à l’horodatage 0 UNIX.

48
Pascal MARTIN

Pour commencer, la fonction php date() attend des secondes en tant que deuxième variable. Cela explique donc pourquoi votre date s’affiche mal. Vérifiez cette source sur cette question.

Ce qui nous fournit alors la réponse au problème, pour que PHP puisse formater correctement la date à partir d'un horodatage SQL, il suffit de changer la requête un peu ...

SELECT author, `when`

Changez-le en ...

SELECT author, UNIX_TIMESTAMP(`when`)

Ensuite, utilisez la fonction de date PHP avec la variable qui stocke le résultat de la requête SQL ci-dessus. 

4
Urda

Vous pouvez simplement utiliser la fonction date_format () de MySQL à la place:

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....

Cela vous évitera d'avoir à aller chercher votre horodatage dans l'heure unix, puis à revenir dans une chaîne de date normale en PHP. Un appel de formatage datetime plutôt que deux.

1
Marc B

je pense que cela sera utile à newble:

exemple soustraction de base 1 heure à partir de la date du format MYSQL:

$to='2013-25-10 22:56:00'; //curr time
$timestamp = strtotime($to); //convert to Unix timestamp
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds)
echo date("Y-m-d H:i:s",$timestamp); //show new date
1
qant

ok, je luttais avec cela pendant une semaine (plus longtemps mais j'ai pris une pause).

J'ai deux champs spécifiques dans les tableaux

 creationDate> timestamp> current_timestamp 
 editDate> timestamp> current_timestamp 

ils se retiraient soit le 31 décembre 1969, soit tout simplement rien ... ennuyeux ... très énervant

dans la requête mysql j'ai fait:

            unix_timestamp(creationDate) AS creationDate
            unix_timestamp(editDate) AS editDate

en php converti j'ai fait:

    $timestamp = $result_ar['creationDate'];
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp)
            echo($creationDate);

    $editstamp = $result_ar['editDate'];
    $editDate = date("Y-M-d (g:i:s a)", $editstamp)
            echo($editDate);

cela a résolu mon problème pour moi en revenant

            2010-Jun-28 (5:33:39 pm)
            2010-Jun-28 (12:09:46 pm)

respectivement.

J'espère que ça aide quelqu'un..

0
James Van Leuvaan

EDIT: Après vérification, il semble que MySQL renvoie timestamp sous forme de chaîne à PHP. Cette réponse était donc fausse :)

Quoi qu'il en soit, la raison pour laquelle vous obtenez une date en 1969 est probablement que vous convertissez une heure unix zéro de l'heure UTC à l'heure locale. Le temps unix est le nombre de secondes écoulées depuis 1970. Donc, une valeur de 0 signifie 1970. Vous vivez probablement dans un fuseau horaire avec un décalage négatif, comme GMT-6, qui finit par être le 31-12-69.

0
Andomar