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

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

2010-02-20 13:14:09 

Я вытаскиваю из базы данных и

 echo date("mdY",$r['newsDate']) 

Мой конечный результат показан как

 12-31-69 

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

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

Solutions Collecting From Web of "Форматирование временной метки SQL с помощью PHP"

Функция date ожидает, что временная метка UNIX будет ее вторым параметром – это означает, что вам нужно преобразовать дату, которую вы получаете из БД, в strtotime метку UNIX, которую можно выполнить с помощью strtotime :

 $db = '2010-02-20 13:14:09'; $timestamp = strtotime($db); echo date("mdY", $timestamp); 

И вы получите:

 02-20-2010 

Вы передавали строку '2010-02-20 13:14:09' в функцию date ; эта строка не является допустимой отметкой времени UNIX.

'12-31-69 ', вероятно, 1970-01-01 , в вашем регионе; и 1970-01-01 – Эпоха – дата, соответствующая 1970-01-01 времени 0 UNIX.

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

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

 SELECT author, `when` 

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

 SELECT author, UNIX_TIMESTAMP(`when`) 

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

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

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

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

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

пример базового вычитания 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("Ymd H:i:s",$timestamp); //show new date 

EDIT: после проверки, кажется, что MySQL возвращает timestamp как строку для PHP, поэтому этот ответ был фиктивным 🙂

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

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

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

 createDate> метка времени> current_timestamp
 editDate> метка времени> current_timestamp

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

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

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

в php convert я сделал:

  $timestamp = $result_ar['creationDate']; $creationDate = date("YMd (g:i:sa)", $timestamp) echo($creationDate); $editstamp = $result_ar['editDate']; $editDate = date("YMd (g:i:sa)", $editstamp) echo($editDate); 

это решило мою проблему для меня, возвращаясь

  2010-Jun-28 (5:33:39 pm) 2010-Jun-28 (12:09:46 pm) 

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

Надеюсь, это поможет кому-то …