2010-10-11 5 views
5

Возможно ли, чтобы PHP получил смещение часового пояса для данного местоположения? Например. когда дано местоположение «Сидней/Австралия», чтобы получить смещение часовой пояс как «+1100». Бонус будет для этой функции учитывать дневную экономию дневного света (т. Е. Он знает о дневном свете и регулирует смещение в соответствии).Получить смещение часового пояса для заданного местоположения

+0

Вы пытаетесь отобразить дату/время в заданном часовом поясе? –

+0

Вы имеете в виду официальные названия часового пояса или любое местоположение в мире? –

+0

@ david. Я храню UTC, и я хочу, чтобы иметь возможность конвертировать эту метку времени в любое местное время. – Luke

ответ

6

Чтобы отобразить локальную дату/время, вы можете использовать следующую команду, где «Europe/Berlin» будет заменен на часовом поясе пользователя.

$date = new DateTime($value); 
$date->setTimezone(new DateTimeZone('Europe/Berlin')); 
echo $date->format('Y-m-d H:i:s'); 
3

Не знаю, почему вам нужно «+1100» (а не десятичном представлении), но вы можете использовать это:

$dt = new DateTime(null, new DateTimeZone('Australia/Sydney')); 
$offset = $dt->getOffset()/60/60; // 11 

$hours = intval($offset); 
$minutes = str_pad((string)($offset - $hours) * 60, 2, '0', STR_PAD_RIGHT); 
echo $hours.$minutes; // 1100 

Заменить null с '2010-10-01' и вы получите 1000

17

Вы можете использовать класс .

<?php 
$timezone = new DateTimeZone("Australia/Sydney"); 
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds 
echo ($offset < 0 ? '-' : '+').round($offset/3600).'00'; // prints "+1100" 
?> 
Смежные вопросы