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.
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.
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.
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.
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
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..
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.