Дата и время часто выводятся нами в новостях, комментариях или постах в форумах. Но я столкнулся с такой проблемой. У меня на предприятии заявки на неисправности разработанных мной сайтов приходят регулярно, для этого у заказчиков есть специальный интерфейс. Так вот там дата и время заявки стали сильно врать, а именно врать они стали после отмены перевода на летнее время. Именно поэтому я озадачился решением данной задачи и вот что у нас есть на выходе.
Первое куда естественно стоит посмотреть - это на временной пояс, который установлен по умолчанию. Делается это просто:
if (date_default_timezone_get()) {
echo 'Дефолтная временная зона: ' . date_default_timezone_get() . '<br>';
}
if (ini_get('date.timezone')) {
echo 'date.timezone: ' . ini_get('date.timezone');
}
//Получим следующее сообщение
/*
Дефолтная временная зона: Материк/Город
date.timezone: Материк/Город
*/
date.timezone задается в файле php.ini сервера, и к сожалению он не всегда доступен для правки. Поэтому выход из ситуации, когда вас не устраивает выдаваемое скриптом время это поменять дефолтную зону насильно в самом скрипте (желательно прописать такую фукнцию в начале файла), задав ее функцией date_default_timezone_set (). Данная функция влияет на дату и время, которые выводит данный скрипт и все подключаемые к нему скрипты.
date_default_timezone_set('Asia/Magadan');
echo date("D-m-Y H:i:s");
Для того, чтобы узнать правильное написание своего временного пояса воспользуйтесь справкой сайта php.ru.
Другой интересной фишкой является вывод локализованной даты и времени. Не всем нравится например то, что на его сайте выводится дата в формате 12 january 2012, мы же живем в России и хочется чтобы выводилось 12 января 2012. Делается это просто. В файле, в котором вы подключаетесь к базе данных, после подключения дописываем следующее:
mysql_query("SET lc_time_names = 'ru_RU'") ;
Теперь при формировании SQL запроса достаточно сделать следующее:
$sql = "SELECT ID, VALUE1, VALUE2, VALUE3, DATE_FORMAT(date, '%d %M %Y %H:%i') as DATE, VALUE4 FROM $table";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
Таким образом при выводе в последствии в шаблоне вашей даты из массива c помощью $myrow["DATE"] вы получите локализованную версию времени и даты. Маску вывода вы можете менять по своему усмотрению.