Время и дата в php
29.08.2008
Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в 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 в качестве домашнего задания.
Tags: DATE, HTML, Mihalytch, PHP
24.10.2008 в 22:47
Есть замечательная функция strtotime. Вот как решается задача время N дней X часов назад, при N = 2, X = 3 например
echo date("Y-m-d H:i:s", strtotime("-2 day - 3 hours"));
[Ответить]
07.11.2008 в 17:23
Только на ее выполнение тратиться всего в два раза больше времени.
[Ответить]