У меня есть база данных mySQL с полем timestamp. В настоящее время у меня есть только одна запись, пока я тестирую ее.
2010-02-20 13:14:09
Я вытаскиваю из базы данных и
echo date("mdY",$r['newsDate'])
Мой конечный результат показан как
12-31-69
Кто-нибудь знает, почему?
Редактировать: editit: игнорировать это редактирование … FTP-аддон для notepad ++ приурочен и, к сожалению, не отображает ошибку, когда она не может синхронизироваться.
Функция 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)
соответственно.
Надеюсь, это поможет кому-то …