чем хорош php для тех, кто его знает в разной степени — всегда можно решить требуемую задачу. иногда кода потребуется много, а иногда можно обойтись буквально несколькими строками.
порой встречаются задачи вычисления даты через некий промежуток времени. при этом какая-то дата либо задаётся, либо отсчитывается от текущего момента.
для первого случая сразу приходит в голову перевести дату в timestamp. сделать это можно с помощью функции, принимающей кучу параметров:
$time = mktime($hour, $minute, $second, $month, $day, $year, $is_dst);
но если первичная дата имеет вид «2011-07-07 12:13:14», то сначала из неё потребуется с помощью нескольких вызовов explode или substr, выделить нужные данные, а потом добавить их в вызываемую функцию в правильном порядке. после этого к timestamp`у прибавляется требуемый интервал, и затем с помощью функции date() получается нужная дата.
во втором случае будет чуть проще: текущая дата получается с помощью функции time() (уже timestamp), после чего проводятся необходимые манипуляции.
но ни один из этих методов не является достаточно гибким и простым для понимания. в php 5.2.0 появилось много полезных классов. один из них — DateTime. сразу приведу пример решения задачи, она и правда решается очень просто:
$date = new DateTime('2011-02-03 04:05:06');
$date->modify('+1 day');
echo $date->format('Y-m-d H:i:s');
первой строкой идёт создание экземпляра класса, второй — непосредственно операция по модификации даты, а третья строка выводит полученное значение на экран.
во второй строке можно использовать не только знак +, но и -. а вместо слова day допускается использование следующих основных ключевых слов: year, month, hour, minute, second.
кстати, если в первой строке вызвать класс без параметров:
$date = new DateTime;
будет использоваться текущее время.
и напоследок: если после вызова конструктора будет получено сообщение об ошибке, вроде такого: «Strict standards: DateTime::__construct(). It is not safe to rely on the system’s timezone settings. и ещё что-то…», это значит, что в конфиге php всего лишь не установлена временная зона. ничего страшного, сделать это можно прямо в скрипте вызвав такую функцию (естественно, до конструктора):
date_default_timezone_set('Europe/Moscow');
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц