2013-05-31 4 views
-1

Я работаю над проектом, в котором я конвертирую время в соответствии с местоположением пользователя. Если пользователь принадлежит ALASKA, тогда вся информация будет отображаться в соответствии с часовым поясом своих стран. Я сделал некоторое преобразование, но я получаю неправильное время, если пользователь имеет часовой пояс (DST), который часто меняется.Преобразовать время от времени в мир экономии света Часовой пояс

Вот мой фрагмент кода.

date_default_timezone_set('UTC'); 
$offset=$_SESSION['gmtoffset']; 
echo date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'))-(-$offset)); 

Итак, в этом случае, как мне поддерживать этот часовой пояс? Каков точный способ конверсии по времени?

Любые рекомендации и идеи будут оценены.

Благодаря

+0

Как вы получаете $ _SESSION [ 'GMTOffset']? Покажите это, пожалуйста. Также укажите разницу между выводом времени и желаемым выходным сигналом времени –

+0

, например $ _SESSION ['gmtoffset'] = - 12000, или вы можете видеть также поле смещения таблицы времени часовой таблицы –

+0

Вам следует отказаться от материала смещения и работать с часовыми поясами в соответствии с 2 .x cookbook с использованием строк/объектов часовых поясов и т. д. таким образом здесь нет проблемы, и все работает плавно из коробки. – mark

ответ

0

Вот простое решение

Javascript:

var timeZone = new Date().getTimezoneOffset(); 
document.cookie="tz=" + (timeZone/(-60)); 

Тогда PHP:

if(!empty($_COOKIE['tz']) && $_COOKIE['tz']>=-12 && $_COOKIE['tz']<=13){ 
    $offset = $_COOKIE['tz']; 
    $tz = timezone_name_from_abbr(null, $offset * 3600, true); 
    if($tz === false) $tz = timezone_name_from_abbr(null, $offset * 3600, false); 
    date_default_timezone_set($tz); 
}else{ 
    date_default_timezone_set('UTC'); 
} 
+0

Могу ли я увидеть эту функцию timezone_name_from_abbr(), поэтому я могу проверить и проверить, работает она или нет? –

+0

Это функция php ......... –

+0

Не могли бы вы объяснить эту строку '$ _COOKIE ['tz']> = - 12 && $ _COOKIE ['tz'] <= 13'? –

0

Я немного неясно, в какой, в частности, вы спрашиваете, но надеюсь, это поможет.

Если ваш вопрос касается обнаружения что пользователь находится в часовом поясе, на Аляске, в следующей редакции:

Если ваш вопрос о выборе часового пояса по стране, в следующей редакции:

Если вы желаете, чтобы понять, аляскинских часовых поясов, признают, что существует три различных правовых зон, а также семь различных IANA/Olson/TZ часовых поясов (что PHP можно использовать):

Не пытайтесь обрабатывать часовой пояс как числовое значение. См. «TimeZone! = Offset» в поле timezone tag wiki.

Если вы хотите манипулировать датами с часовыми поясами в PHP, см. Пример в PHP documentation для date_default_timezone_set.

Если вы просто хотите работать с UTC, тогда нет причин ничего делать с часовыми поясами. Браузер всегда может конвертировать UTC в локальный часовой пояс пользователя, независимо от того, что может быть. Просто создайте свои объекты JavaScript Date с целым числом временной метки UTC или проанализируйте формат UTC, например YYYY-MM-DDTHH:MM:SSZ.

Для устранения несоответствия браузера, вы можете использовать библиотеку вместо, например, moment.js:

// here's one way 
var m = moment('2013-05-31T12:34:56Z'); 

// here's another 
var m = moment.utc('2013-05-31 12:34:56','YYYY-MM-DD HH:mm:ss'); 

// pretty much anything else you might want to do... 
+0

, поэтому на этот раз можно преобразовать, как дневной свет часовой пояс ..? –

+0

мой вопрос о 'http: // stackoverflow.com/questions/563053/scheduling-dst' –

Смежные вопросы