2010-02-20 3 views
19

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

2010-02-20 13:14:09 

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

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

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

12-31-69 

Любой знаю, почему?

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

+0

Ах ... не понимал, что mySQL был UNIX закодированным временем ... это имеет смысл. –

+0

Если '$ r ['timestamp']' empty, вы получите время, которое система использует в качестве отправной точки для времени эпохи. (Обычно это 01-01-70 или 12-31-69) – leepowers

ответ

45

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

+0

Не знаете, почему это было проголосовано - это правильно. Вы можете использовать функцию strtotime php или метод UNIX_TIMESTAMP SQL, как было предложено Urda – Simon

+0

@Simon: мне тоже было интересно ;; Я догадался, что я не ответил на вопрос правильно, и задавался вопросом, что такое «правильный способ его понимания» ^^ ;; Спасибо за ваше замечание :-) –

+0

Что делать, если я тоже хочу отобразить время? –

0

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

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

4

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

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

SELECT author, `when` 

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

SELECT author, UNIX_TIMESTAMP(`when`) 

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

1

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

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

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

0

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

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

 
creationDate > timestamp > current_timestamp 
editDate > timestamp > current_timestamp 

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

в MySQL Query я сделал:

  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) 

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

Я надеюсь, что это поможет кому-то из ..

1

я думаю, что это будет полезно 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 
Смежные вопросы