Вы можете передать функции даты второй аргумент, используя mktime .
Что-то вроде этого:
var_dump($endDate = date('Y-m-d h:i:s', mktime(0-2, 0, 0, 2, 1, 2011)));
Или с использованием класса datetime , например:
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
date_default_timezone_set('Europe/Bucharest');
# equivalent of GMT since Europe/Bucharest is +2 , we feed -2 for the hour
var_dump($endDate = date('Y-m-d h:i:s', mktime(date('h')-2, date('i'), date('s'), date('d'), date('m'), date('Y'))));
# equivalent of GMT+1 since Europe/Bucharest is +2 we feed -1 for the hour
var_dump($endDate = date('Y-m-d h:i:s', mktime(date('h')-1, date('i'), date('s'), date('d'), date('m'), date('Y'))));
вы также можете накормить +3 на час, принимая Европу / Бухарест в качестве часового пояса по умолчанию, равном +3, будет означать GMT +5, вы также можете установить часовой пояс по умолчанию, по которому Европа / Лондон эквивалентны GMT0, после чего пользователь отправляет вам +2 вы будете кормить mktime с +2 за час, который даст вам эквивалент GMT + 2 Европа / Бухарест.