У меня есть база данных MySQL с полем метки времени. Это в настоящее время только имеет одну запись, в то время как я тестирую, это
2010-02-20 13:14:09
Я вытягиваю от базы данных и использования
echo date("m-d-Y",$r['newsDate'])
Мой конечный результат показывает как
12-31-69
Кто-либо знает почему?
Править: editedit: игнорирование, которые редактируют... дополнение FTP для блокнота ++ приведенный к таймауту и к сожалению не отображают ошибку, когда это не может синхронизировать.
Функция date
ожидает UNIX timestamp в качестве второго параметра - это означает, что вы должны преобразовать дату, полученную из БД, в UNIX timestamp, что можно сделать с помощью strtotime
:
$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);
И вы получите :
02-20-2010
Вы передавали '2010-02-20 13:14:09'
строку date
функции; эта строка не является действительной временной меткой UNIX.
'12-31-69
' - это, вероятно, 1970-01-01
, в вашей локали ; а 1970-01-01
- это Эпоха - дата, которая соответствует 0 UNIX Timestamp.
Для начала, функция php date()
ожидает секунды в качестве второй переменной. Это объясняет, почему ваша дата отображается неправильно. Проверьте этот источник по этому вопросу.
Что дает нам ответ на проблему: чтобы заставить PHP правильно форматировать дату из временной метки SQL, мы просто немного изменим запрос...
SELECT author, `when`
Изменим его на...
SELECT author, UNIX_TIMESTAMP(`when`)
Затем используем функцию PHP date с переменной, в которой хранится результат вышеуказанного SQL-запроса.
EDIT: После проверки выяснилось, что MySQL возвращает timestamp
как строку в PHP, так что этот ответ был ошибочным :)
В любом случае, причина, по которой вы получаете дату в 1969 году, вероятно, заключается в том, что вы конвертируете нулевое unix-время из UTC в локальное время. Время unix - это количество секунд, прошедших с 1970 года. Таким образом, значение 0 означает 1970 год. Возможно, вы живете в часовом поясе с отрицательным смещением, например, GMT-6, что в итоге означает 31-12-69.
Вместо этого вы можете использовать функцию MySQL date_format():
SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....
Это избавит вас от необходимости преобразовывать временную метку в unix-время, а затем обратно в обычную строку даты в PHP. Один вызов форматирования даты вместо двух.
Хорошо, я боролся с этим неделю (дольше, но я сделал перерыв).
У меня есть два конкретных поля в таблицах
creationDate > timestamp > current_timestamp editDate > timestamp > current_timestamp
, которые они извлекали либо 31 декабря 1969 года, либо просто ничего ... раздражает ... очень раздражает
в запросе mysql, который я сделал:
unix_timestamp(creationDate) AS creationDate
unix_timestamp(editDate) AS editDate
в php convert i сделал:
$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);
это решило мою проблему для меня, вернув
2010-Jun-28 (5:33:39 pm)
2010-Jun-28 (12:09:46 pm)
соответственно.
Надеюсь, это кому-то поможет ..