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

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

2010-02-20 13:14:09

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

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

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

12-31-69

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

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


person Chris Sobolewski    schedule 20.02.2010    source источник
comment
Ах ... не понимал, что mySQL был закодирован во времени UNIX ... тогда это имеет смысл.   -  person Chris Sobolewski    schedule 21.02.2010
comment
Если $r['timestamp'] пусто, вы получите любое время, которое система использует в качестве отправной точки для времени эпохи. (обычно это 01-01-70 или 12-31-69)   -  person leepowers    schedule 21.02.2010


Ответы (6)


Функция 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.

person Pascal MARTIN    schedule 20.02.2010
comment
Не уверен, почему за это проголосовали - это правильно. Вы можете использовать функцию php strtotime или метод SQL UNIX_TIMESTAMP, предложенный Urda. - person Simon; 21.02.2010
comment
@Simon: мне тоже было интересно, на самом деле ;; Я догадался, что неправильно ответил на вопрос, и мне было интересно, как правильно его понять ^^ ;; Спасибо за ваше замечание :-) - person Pascal MARTIN; 21.02.2010
comment
Что делать, если я тоже хочу отображать время? - person Mister Verleg; 29.06.2016
comment
вы можете использовать что-то вроде date("G:i", $timestamp) - для получения дополнительной информации см. руководство php.net/manual/de /function.date.php - person Xerus; 03.05.2017

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

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

SELECT author, `when`

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

SELECT author, UNIX_TIMESTAMP(`when`)

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

person Urda    schedule 20.02.2010

Вы можете просто использовать MySQL date_format () вместо этого:

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

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

person Marc B    schedule 21.02.2010

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

пример базового вычитания 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
person qant    schedule 25.10.2013

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

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

person Andomar    schedule 20.02.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)

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

Я надеюсь, что это поможет кому-то..

person James Van Leuvaan    schedule 02.07.2010