2013-10-27 9 views
0

기본적으로 웹 사이트는 전 세계적으로 사용자의 시간대를 감지하고 정확한 시간을 표시 할 수 있어야합니다. 나는 지금까지 완벽하게 작동했던이 스크립트를 가지고 있습니다. 그것은 자바 스크립트로 가져오고 쿠키를 통과하는 시간대 오프셋이 필요합니다.timezone_name_from_abbr() 올바르게 인식하지 못합니다.

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'); 
} 

문제는 현재 내가에서 테스트있어 시간대 (일광 절약없이) UTC + 2입니다 유럽/헬싱키이라고하지만, 어떤 이유로 timezone_name_from_abbr()에 대한 * 3600이 유럽/파리입니다 결정한다. 나는 날짜와 시간대와 정말로 나쁘다, 나는 필사적으로 도움이 필요하다, 제발!

답변

3

일반적으로 오프셋 (예 : UTC + 02 : 00)만을 기반으로 정확한 시간대 (예 : Europe/Helsinki 또는 Europe/Paris)를 찾는 것은 모든 종류의 신뢰성 또는 정확성으로는 불가능합니다. 대부분의 시간대는 특정 시점에서 동일한 오프셋을 공유하며 일광 절약 시간제 규칙으로 인해 많은 시간대가 일년 내내 서로 다른 두 가지 오프셋 사이를 전환합니다.

모든 표준 시간대 목록과 표준 및 일광 오프셋 here 목록을 볼 수 있습니다.

시간대 약어에서 시간대로 이동한다는 아이디어는 여러 시간대가 동일한 약어를 공유 할 수 있으므로 소리가 나지 않습니다. 예를 들어 "중부 표준시"는 "중부 표준시"(미국), "중부 표준시"(호주), "중부 표준시"(호주), "중국 표준시"또는 "쿠바 표준시"일 수 있습니다. 자세한 내용은 this list을 참조하십시오.

이러한 우려 사항을 감안할 때 PHP가 timezone_name_from_abbr이라는 기능을 제공한다는 것은 이상한 일입니다. 명확하게 개념적으로 결함이 있으므로 사용하지 않는 것이 좋습니다.

사용자의 시간대를 확인한 후에는 JavaScript 라이브러리 jsTimeZoneDetect을 사용해보십시오. 완벽하지는 않지만 일반적으로 작동하며보다 논리적 인 알고리즘을 기반으로합니다.

관련 문제