Время и дата в php
- 29 August, 2008
- Posted in PHP
Tags : DATE, HTML, PHP- 2 Comments
Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в PHP.
Для начала разберемся с установкой временной зоны. Для этого всего лишь необходимо воспользоваться функцией
bool date_default_timezone_set ( string $timezone_identifier);
Список временных зон (параметров для вышеописанной функции) доступен на официальном сайте PHP. Итак, для того чтобы установить нужную нам временную зону, необходимо вызвать функцию date_default_timezone_set в начале исполняемого скрипта.
Для того чтобы определить текущую временную зону в PHP есть стандартный инструмент:
string date_default_timezone_get ( void );
О сравнении двух дат я уже упоминал ранее. Далее рассмотрим вычитание и сложение даты и времени или как определить какая дата и время были N дней X часов назад!?
Года полтора назад встречал “интересное” решение. Некий разработчик загнал в массив соответствия “номер месяца”=>”количество дней”, затем парсил текущую дату и “вручную” отнимал или прибавлял количество дней, часов, минут, секунд. Описывать подробно этот алгоритм не буду, так как не привык изобретать велосипед. Предлагаю “формулу” гораздо проще:
# $sec - разница в секундах с текущим временем;
# $min - разница в минутах с текущим временем;
# $hour - разница в часах с текущим временем;
# $days - разница в днях с текущим временем;
$need_date = date ("Y-m-d H:i:s", time()+( $sec + 60*($min + 60*($hour + 24*$day))));
Где “Y-m-d H:i:s” всего лишь шаблон времени, которое мы получим в текстовом формате.
Для тех, кто хочет узнать не будущее, а прошлое время – необходимо заменить вот этот плюс … time()+( $sec … на минус.
На этой оптимистической ноте заканчиваю описание. Остальные возможности PHP предлагаю рассмотреть самостоятельно на официальном сайте php.net в качестве домашнего задания.
Есть замечательная функция strtotime. Вот как решается задача время N дней X часов назад, при N = 2, X = 3 например
echo date(“Y-m-d H:i:s”, strtotime(“-2 day – 3 hours”));
Только на ее выполнение тратиться всего в два раза больше времени.