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

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

2010-02-20 13:14:09

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

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

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

12-31-69

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

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

21
задан Cœur 1 January 2017 в 15:06
поделиться

5 ответов

Функция date ожидает UNIX timestamp в качестве второго параметра - это означает, что вы должны преобразовать дату, полученную из БД, в UNIX timestamp, что можно сделать с помощью 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 Timestamp.

52
ответ дан 29 November 2019 в 06:42
поделиться

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

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

SELECT author, `when`

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

SELECT author, UNIX_TIMESTAMP(`when`)

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

4
ответ дан 29 November 2019 в 06:42
поделиться

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

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

0
ответ дан 29 November 2019 в 06:42
поделиться

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

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

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

1
ответ дан 29 November 2019 в 06:42
поделиться

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

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

creationDate > timestamp > current_timestamp
editDate > timestamp > current_timestamp

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

в запросе mysql, который я сделал:

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

в php convert i сделал:

    $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
ответ дан 29 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: