it-roy-ru.com

Форматирование отметки времени SQL с PHP

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

2010-02-20 13:14:09

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

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

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

12-31-69

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

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

19
Chris Sobolewski

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

48
Pascal MARTIN

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

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

SELECT author, `when`

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

SELECT author, UNIX_TIMESTAMP(`when`)

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

4
Urda

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

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

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

1
Marc B

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

пример основного вычитания 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
qant

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

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

 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
James Van Leuvaan

Правка: После проверки, похоже, что MySQL возвращает timestamp как строку в PHP, так что этот ответ был поддельным :)

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

0
Andomar