Форматирование временной метки SQL с помощью PHP - PullRequest
20 голосов
/ 21 февраля 2010

У меня есть база данных mySQL с полем timestamp. В настоящее время у меня есть только одна запись, пока я тестирую, это

2010-02-20 13:14:09

Я вытягиваю из базы и использую

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

Мой конечный результат отображается как

12-31-69

Кто-нибудь знает почему?

Edit: editedit: не обращайте внимания на то, что редактирование ... истекло время ожидания надстройки FTP для notepad ++ и, к сожалению, ошибка не отображается, если не удается выполнить синхронизацию.

Ответы [ 6 ]

51 голосов
/ 21 февраля 2010

Функция date ожидает метку времени UNIX в качестве второго параметра - это означает, что вам нужно преобразовать дату, полученную из БД, в метку времени UNIX, которая может сделать с помощью 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.

4 голосов
/ 21 февраля 2010

Для начала, функция php date() ожидает секунд в качестве второй переменной. Так что это объясняет, почему ваша дата отображается неправильно. Проверьте этот источник по этому вопросу.

Что дает нам ответ на проблему: чтобы PHP правильно отформатировал дату из отметки времени SQL, мы просто изменим запрос на немного ...

SELECT author, `when`

Измените его на ...

SELECT author, UNIX_TIMESTAMP(`when`)

Затем используйте функцию даты PHP с переменной, в которой хранится результат этого SQL-запроса.

1 голос
/ 26 октября 2013

Я думаю, что это будет полезно для новичков:

пример основного вычитания 1 час от даты из формата 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 голос
/ 21 февраля 2010

Вы можете просто использовать вместо MySQL функцию date_format () :

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

Это избавит вас от необходимости возвращать метку времени в unix-время, а затем обратно в обычную строку даты в PHP. Один вызов форматирования даты и времени, а не два.

0 голосов
/ 03 июля 2010

хорошо, я боролся с этим в течение недели (дольше, но я взял перерыв от этого).

У меня есть два конкретных поля в таблицах

creationDate > timestamp > current_timestamp
editDate > timestamp > current_timestamp

они вытаскивали или 31 декабря 1969 года, или просто ничего ... раздражающего ... очень раздражающего

в запросе MySQL я сделал:

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

в PHP конвертировать я сделал:

    $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)

соответственно.

Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 21 февраля 2010

РЕДАКТИРОВАТЬ: После проверки, похоже, MySQL возвращает timestamp в виде строки в PHP, поэтому этот ответ был поддельным:)

В любом случае, причина, по которой вы получаете дату в 1969 году, заключается, вероятно, в том, что вы конвертируете нулевое unix-время из UTC в местное время. Время unix - это количество секунд с 1970 года. Таким образом, значение 0 означает 1970 год. Вы, вероятно, живете в часовом поясе с отрицательным смещением, например GMT-6, который в итоге равен 31-12-69.

...