[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: мой часовой пояс, помогите разобраться
Hugo_O
я живу в Нижнем Новгороде, у меня ЧП +3 по гринвичу всю жизнь был
<script>
var date = new Date()
alert (-(date.getTimezoneOffset()/60));

//возвращает мне 4

</script>


<?
echo date("H:i:s")."<br>";
echo gmdate("H:i:s");
?>


результат:
17:17:15 - то же, что и у меня на компе (в ос+3 стоит)
13:17:15 - время по гринвичу

разница опять +4

кто-нибудь может объяснить мне причину этого?
waldicom
Летнее время?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Hugo_O
waldicom
насколько я знаю +3 и летом и зимой, по крайней мере если это не так, то я сильно удивлюсь)))
хочется сейчас позвонить в Лондон и спросить у них сейчас на самом деле 13:36))?

на самом деле тему я создал больше из любопытства, а на работу скриптов это вряд ли как-то повлияет видимо...
waldicom
Цитата (Hugo_O @ 18.06.2010 - 15:38)
waldicom
насколько я знаю +3 и летом и зимой, по крайней мере если это не так, то я сильно удивлюсь)))
хочется сейчас позвонить в Лондон и спросить у них сейчас на самом деле 13:36))?

на самом деле тему я создал больше из любопытства, а на работу скриптов это вряд ли как-то повлияет видимо...

+3 это видимо потому, что и Лондон переходит на летнее время. А вот если, например, Казахстан, как продвинутая страна не переходит на летнее/зимнее время, то у нас с ними разница то 4 то 5 часов.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Hugo_O
waldicom
тык наоборот, получается Лондон не переходит раз +4 показывает?)))
Nikitian
Самый простой вариант узнать сколько где времени: time.yandex.ru
Hugo_O
Nikitian
ну да)))) только там вот время 14 с минутами, то есть разница все-таки +3, а почему тогда gmdate выдает -4 ?
SlavaFr
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 й вариант конечно проще. smile.gif

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.