Подтвердить что ты не робот

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

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

2010-02-20 13:14:09

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

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

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

12-31-69

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

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

4b9b3361

Ответ 1

Функция 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 - это Epoch - дата, соответствующая отметке времени 0 UNIX.

Ответ 2

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

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

SELECT author, `when`

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

SELECT author, UNIX_TIMESTAMP(`when`)

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

creationDate > timestamp > current_timestamp
editDate > timestamp > current_timestamp

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

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

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

в php convert я сделал:

    $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)

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

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