ProfiPHPProfiPHP
Категория: Полезное в PHP

Запись и чтение даты из базы данных в PHP

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

Как же хранить дату в базе данных? А это зависит от многих факторов и в каждой отдельной ситуации нужно выбирать оптимальный вариант.

Самое простое решение записи даты в базу данных это использование функции Time.

К примеру:
$data = time(  ); 
Данные будут сохранятся в таком виде:
1348498853
Этот формат очень легко переводить практически в любой нужный для решения данной задачи вид. Для этого напишем простую функцию, которая будет делать преобразования выше написанного набора цифр в понятный для человека формат:
function timeformat( $time = NULL )
{
$labelTime = date( 'd.m.Y', $time );
$arrM = array( '01'=> 'января', '02'=> 'февраля', '03'=> 'марта', '04'=> 'апреля', '05'=> 'мая', '06'=> 'июня', '07'=> 'июля', '08'=> 'августа', '09'=> 'сентября', '10'=> 'октября', '11'=> 'ноября', '12'=> 'декабря' );
if ( $labelTime == date( 'd.m.Y' ) ) {
return 'Сегодня, '.date( 'H:i', $time );
}
elseif ( $labelTime == ( strlen( date( 'd' ) - 1 ) == 1 ? '0'. ( date( 'd' ) - 1 ) : ( date( 'd' ) - 1 ) ).'.'.date( 'm.Y' ) ) {
return 'Вчера, '.date( 'H:i', $time );
}
elseif ( date( 'Y', $time ) == date( 'Y' ) ) {
return date( 'd', $time ).' '.$arrM[date( 'm', $time )].', '.date( 'H:i', $time );
}
else {
return date( 'd', $time ).' '.$arrM[date( 'm', $time )].' '.date( 'Y', $time ).', '.date( 'H:i', $time );
}
}
Теперь остается только в аргументе функции передать сохраненное значение даты и времени для чтения даты из базы данных.

А вот и результат выполнения:
Сегодня, 18:46 // сегодняшняя новость
Вчера, 18:46 // вчерашняя новость
07 января, 18:46 // через месяц
7 января 2011, 18:46 // через год
Таким образом можно решить проблему записи и чтения даты из базы данных.

Но, в каждом деле есть свои подводные камни и при работе с датой, именно таким подводным камнем является часовой пояс. В зависимости от часового пояса будет отображаться различная дата, которая зависит от настроек операционной системы и интерпретатора PHP.

Функция Time возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch 1 января 1970 00:00:00 GMT) до текущего времени.

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

А теперь представим ситуацию, когда мы сохраняем время в таком же формате для сохранении даты создания записей.
id, name, date
( 1, 'user name', '1482740353' )
И на серверном программном обеспечении изменился часовой пояс, например, был:
date_default_timezone_set( 'Europe/Moscow' );
стал:
date_default_timezone_set( 'Europe/Kiev' );
В результате, будет осуществлено смещение на 2 часа (в зависимости от смены часового пояса), что повлечет к выводу неверной даты.

Во избежание данной ситуации, необходимо хранить данные в следующем формате:
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
Теперь, независимо от часового пояса, вывод информации будет всегда верен.

Добавить комментарий

Имя:
Текст комментария: