Форматирование метки времени SQL с помощью PHP


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

2010-02-20 13:14:09

Я извлекаю данные из базы данных и использую

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

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

12-31-69

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

Редактировать: отредактировано: не обращайте внимания на это изменение... время ожидания дополнения FTP для notepad++ истекло, и, к сожалению, не отображается ошибка, когда он не может синхронизироваться.

Author: Cœur, 2010-02-21

6 answers

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

 47
Author: Pascal MARTIN, 2010-02-20 21:09:48

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

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

SELECT author, `when`

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

SELECT author, UNIX_TIMESTAMP(`when`)

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

 4
Author: Urda, 2010-02-20 21:10:59

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

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

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

 1
Author: Marc B, 2010-02-21 14:39:25

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

Пример базового вычитания 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
Author: qant, 2013-10-25 21:00:58

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

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

 0
Author: Andomar, 2010-02-20 21:22:42

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

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

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
Author: James Van Leuvaan, 2010-07-02 21:21:53