2010-08-13 4 views
6

PHP의 표준 시간대 설정의 최대 길이는 얼마입니까? 나는 문자열을 데이터베이스에 저장하고 길이를 가능한 한 짧게 유지하려고하지만 현재 제한을 초과하는 "Canada/East-Saskatchewan"과 같은 시간대를 봅니다.PHP TZ 설정 길이

지원되는 모든 표준 시간대 문자열 목록을 얻을 수만 있다면 정렬 할 수 있지만 현재 여러 개의 다른 페이지로 분할되어 있습니다.

linky : 모든 시간대는 4 자 이하로 단축 할 수 http://www.php.net/manual/en/timezones.php

+2

환영하는 커뮤니티를 해주셔서 감사합니다. – karlw

답변

12

대답은 32입니다 그리고 여기에을 찾을 수있는 완전한 PHP 코드 :

<?php 
$timezone_identifiers = DateTimeZone::listIdentifiers(); 

$maxlen = 0; 
foreach($timezone_identifiers as $id) 
{ 
    if(strlen($id) > $maxlen) 
     $maxlen = strlen($id); 
} 

echo "Max Length: $maxlen"; 

/* 
Output: 

Max Length: 32 

*/ 
?> 
+3

OP를 폭을 32로 설정하는 것은 큰 실수가된다는 점에 유의해야합니다. 경우에 따라 더 높게 설정해야합니다. – Buggabill

+8

나는 그 대답이 42라고 생각했다 - 항상 42가 아닌가? –

+0

@Jonathan - 나는 이것을 말할 것이지만 OP가 그것을 사용하기를 원하지 않았다 ...:-) – Buggabill

0

. (http://www.timeanddate.com/library/abbreviations/timezones/) 그렇다면 어쩌면 간단한 이름으로 그들을 연결하는 전체 이름 시간대의 정적 배열을 간단하게 만들 수 있습니다. 이렇게하면 둘 다 사용할 수 있습니다. manual에서

$timeZone = 'Canada/East-Saskatchewan'; 
$tz = DateTimeZone::listAbbreviations(); 
echo recursiveArraySearch($tz, $timeZone); 
function recursiveArraySearch($haystack, $needle, $index = null) { 
    $aIt  = new RecursiveArrayIterator($haystack); 
    $it = new RecursiveIteratorIterator($aIt); 
    while($it->valid()) {  
     if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) { 
      return $aIt->key(); 
     } 
     $it->next(); 
    } 
    return false; 
} 
+2

고유하지 않습니다. 예를 들어, "EST"라는 세 개의 다른 영역이 있음을 주목하십시오. 뿐만 아니라, 두 종류의 기술 어는 똑같은 것을 기술하지도 않습니다. 예를 들어 Olson zone 'America/Denver'는 겨울에는 3 자의 이름 인 'MST'와 여름에는 'MDT'에 해당하며 'America/Phoenix'는 연중 'MST'에 해당합니다. 적어도 "MST7MDT, M3.2.0, M11.1.0 '과 같은 POSIX 영역 설명자가 필요하지만 실제로는 정보가 덜 포함되어 있습니다. – hobbs

+0

좋은 캐치. 나는 일광 절약에 대해 설명하는 것을 잊었다. 나는 그것을 수용하는 방법을 알아 내려고 노력할 것이다. –

1

:

<?php 
$timezone_identifiers = DateTimeZone::listIdentifiers(); 
for ($i=0; $i < 5; $i++) { 
    echo "$timezone_identifiers[$i]\n"; 
} 
?> 
8

올슨 데이터베이스 - 사용할 수 ftp://ftp.iana.org/tz/releases/ 또는 http://www.iana.org/time-zones (에서 그러나 또한 http://www.twinsun.com/tz/tz-link.htm*http://en.wikipedia.org/wiki/Tz_database) - th 일 것 이러한 이름의 소스. 파일 Theory의 문서에는 영역 이름이 어떻게 구성되는지에 대한 설명이 포함되어 있습니다. 이렇게하면 이름이 얼마나 오래 있는지 설정할 수 있습니다.

가장 긴 '현재'이름은 30 자 (America/Argentina/Buenos_Aires, America/Argentina/Rio_Gallegos, America/North_Dakota/New_Salem)입니다. 가장 긴 '이전 버전과의 호환성'이름은 32 자입니다 (America/Argentina/ComodRivadavia). (예 : 올슨 데이터베이스가 ftp://ftp.elsie.nci.nih.gov에서 사용할 수 있음을 시사 등 - 대신 IANA에서 사용할 수 있습니다)에 TwinSun 사이트가 몇 시간 동안 업데이트 및 일부 오래된 링크가되지 않았 음을

*참고.

0

PHP를 사용하여 MySQL을 사용하는 경우 MySQL은 이미 "이름"이라는 열의 "time_zone_name"테이블에 "mysql"시스템 데이터베이스에 Olson 시간대 이름을 저장한다고 생각하십시오. 하나의 옵션은 MySQL이 사용하는 길이와 일치하도록 컬럼의 길이를 선택하는 것이다. MySQL 5.7에서는 시간대 이름 길이가 64 자입니다. MySQL 설치에서 사용중인 길이를 확인하려면 아래 예를 따르십시오.

mysql> use mysql 
Database changed 
mysql> describe time_zone_name; 
+--------------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+--------------+------------------+------+-----+---------+-------+ 
| Name   | char(64)   | NO | PRI | NULL |  | 
| Time_zone_id | int(10) unsigned | NO |  | NULL |  | 
+--------------+------------------+------+-----+---------+-------+ 
2 rows in set (0.01 sec)