2010-09-22 5 views
3

Я нашел правильное решение моей «проблемы», но даже после чтения страниц mysql я не понимаю логики, стоящей за ней.MySQL datetime в PHP

В настоящее время я храню регистрационную информацию в своей системе в поле «datetime» в одном из моих таблиц (YYYY-MM-DD hh:mm:ss).

Когда я хочу отображать данные на одной из моих страниц php, просто размещение точных данных поля показывает формат, упомянутый выше.

Я ДУМАЮ просто с помощью date("Y-m-d",$row["DATE"]), где $row["DATE"] соответствует конкретному значению строки будет возвращать нужный формат.

Вместо этого я должен использовать: date("Y-m-d", strtotime($row["DATE"])).

Почему это? Мое поле $row["DATE"] не является строкой в ​​первую очередь. Должен ли я быть в состоянии просто переупорядочить данные, хранящиеся в поле datetime? Разве это не было целью восстановления моего всего столового столика для размещения в datetime?

ответ

5

У MySQL есть встроенная функция, называемая date_format, которую вы можете использовать для отображения даты, как вы хотите.

SELECT DATE_FORMAT(date_field, '%Y-%m-%d') as date_field FROM table_name 

В руководстве есть список форматов и переменных, необходимых для его отображения. Используя этот метод, не будет необходимости в PHP, чтобы преобразовать его и т. Д. Кроме того, на PHP-стороне меньше кода для чего-то, с чем легко справляется MySQL.

EDIT

К сожалению, только что прочитал, что искали объяснение.

Функция PHP date принимает временную метку UNIX, которую MySQL не использует. MySQL использует реальный формат даты IE: YYYY-MM-DD HH:MM:SS, как вы знаете, это должно выполняться много лет спустя. Временная метка UNIX имеет ограниченный диапазон от чего-то вроде 1969-2037, для которого она действительна, что делает ее действительно полезной для «временной маркировки» таких элементов, как сообщение в чате или элементы, которые, как ожидается, не будут размещены вокруг этих дат, поскольку MySQL DATETIME не должен вымирать до тех пор, пока год не изменится на 5 цифр или мир не закончится.

Прочтите WIKI по телефону UNIX timestamp для получения дополнительной информации.

2

MySQL позволяет вам выбирать даты в формате timestamp в формате unix, что позволяет им проще использовать PHP в точности так, как вы просили.

Предыдущий ответ, казалось, игнорировать этот момент, или преуменьшить его из-за сужения диапазона на метку времени Unix, но если это то, что вы ищете ...

SELECT UNIX_TIMESTAMP(datefield) as u_datefield FROM table 

даст вам дату в формате временных меток, которые вы можете использовать, как вы предложили в PHP:

<?php 
$showdate = date("Y-m-d",$row['u_datefield']); 
?> 

Как следует из ответа на предыдущий вопрос, Unix временные метки имеют ограниченный диапазон, так что если вам нужно даты до 1970 или после 2038 она не может быть подходит, но для повседневного использования сегодня это здорово.

Главное преимущество использования временных меток над строками даты заключается в том, что временные метки могут быть добавлены и вычтены, что намного сложнее с датой в строковом формате.