1)UTC или gmdate выдает время по Гринвичу. Это время рассматривается как Эталон и не имеет летнего или зимнего времени.
Т.е локальное время в Лондоне тоже не одинаково с Гринвичем, так как в Лондоне сечас летнее время
2)Часовой Пояс это абсолютное смещение от Гринвича ( в Нижнем Новгороде +3)
Локальное время выщитывается следующим образом
UTC + Часовой Пояс + (елси Летнее время, то 1 час, в противном случае 0 часов)
$m=new DateTimeZone('Europe/Moscow');
$g=new DateTimeZone('Europe/London');
$moscow = new DateTime("now", $m);
$grinvich = new DateTime("now", $g);
$offset=($m->getOffset($grinvich) - $g->getOffset($moscow))/60/60;
$offset+= $moscow->format('I')?1:0;
echo $offset;
получаем то, что и ожидали.
ты можеш так же использовать date('P') чтобы определить смещение по времени к гринвичу, не вникая в то какое сейчас время.
так что не удевляйсе, что оно показывает зимой 1 час а летом 2, так как в date('P') смещение учитывает в зависемости от летнего и зимнего время.
(вообщем как раз то что тебе и надо)
пример:
$novyj_god=strtotime('2010-01-01 00:00:00');
echo 'novyj god'.date('P',$novyj_god).'<br />';
$leto=strtotime('2010-06-01 00:00:00');
echo 'leto '.date('P',$leto).'<br />';
2 й вариант конечно проще.
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();