2010-08-13 6 views
6

मुझे आश्चर्य था कि PHP में टाइमज़ोन सेटिंग्स की अधिकतम लंबाई क्या है? मैं डेटाबेस में स्ट्रिंग को संग्रहीत कर रहा हूं, और जितना संभव हो उतना लंबा रखना चाहता हूं, लेकिन मुझे "कनाडा/ईस्ट-सास्काचेवान" जैसे टाइमज़ोन दिखाई देते हैं, जो हमारी वर्तमान सीमा से परे है।PHP TZ सेटिंग की लंबाई

यदि मैं सिर्फ सभी समर्थित टाइमज़ोन स्ट्रिंग की सूची प्राप्त कर सकता हूं, तो मैं उन्हें सॉर्ट कर सकता हूं, लेकिन वे वर्तमान में कई अलग-अलग पृष्ठों पर विभाजित हैं।

पंक्ति: http://www.php.net/manual/en/timezones.php

+2

स्वागत समुदाय होने के लिए धन्यवाद। – karlw

उत्तर

12

उत्तर यहाँ 32. है और पूरा पीएचपी कि खोजने के लिए कोड है:

<?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

यह ध्यान रखना महत्वपूर्ण है कि ओपी चौड़ाई को 32 तक सेट करना एक बड़ी गलती होगी। यह उच्च निर्धारित किया जाना चाहिए - बस मामले में। – Buggabill

+8

मैंने सोचा कि जवाब 42 है - क्या यह हमेशा 42 नहीं है? –

+0

@ जोनाथन - मैं यह कहने जा रहा था लेकिन ओपी इसे इस्तेमाल नहीं करना चाहता था ...:-) – Buggabill

0

हर समय क्षेत्र 4 वर्ण या उससे कम में संक्षिप्त जा सकता है। (http://www.timeanddate.com/library/abbreviations/timezones/) तो हो सकता है कि आप आसानी से पूर्ण नाम टाइमज़ोन की एक स्थिर सरणी बना सकें जो उन्हें उनके संक्षिप्त नाम से जोड़ती है। यह आपको दोनों का उपयोग करने की अनुमति देगा।

$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

विशिष्ट नहीं है। उदाहरण के लिए, ध्यान दें कि "ईएसटी" नामक तीन अलग-अलग जोन हैं। इतना ही नहीं, लेकिन दो प्रकार के वर्णनकर्ता भी एक ही चीज़ का वर्णन नहीं करते हैं। उदाहरण के लिए, ओल्सन जोन 'अमेरिका/डेनवर' सर्दियों में तीन अक्षरों के नाम 'एमएसटी' और गर्मियों में 'एमडीटी' से मेल खाता है, जबकि 'अमेरिका/फीनिक्स' साल भर 'एमएसटी' से मेल खाता है। कम से कम आपको 'एमएसटी 7 एमडीटी, एम 3.2.0, एम 11.1.0' जैसे पॉज़िक्स जोन डिस्क्रिप्टर की आवश्यकता है, लेकिन यहां तक ​​कि वास्तव में कम जानकारी भी शामिल है :) – hobbs

+0

अच्छी पकड़। मैं डेलाइट बचत के लिए खाता भूल गया। मैं यह जानने के लिए काम कर रहा हूं कि इसके लिए कैसे समायोजित किया जाए। –

1

से manual:

<?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) देखें - वें है इन नामों का ई स्रोत। फ़ाइल थ्योरी में प्रलेखन में वर्णन शामिल है कि ज़ोन नाम कैसे बनाए जाते हैं। यह आपको यह निर्धारित करने में मदद करेगा कि नाम कितने समय तक हो सकते हैं।

सबसे लंबे समय तक 'वर्तमान' नाम 30 वर्ण हैं (अमेरिका/अर्जेंटीना/ब्यूनस_एयर्स, अमेरिका/अर्जेंटीना/रियो_ गैलेगोस, अमेरिका/नॉर्थ_Dakota/New_Salem); सबसे लंबी 'पिछड़ा संगतता' नाम 32 वर्ण (अमेरिका/अर्जेंटीना/कॉमोड्रिवादाविया) है।

*ध्यान दें कि TwinSun साइट कुछ समय के लिए अपडेट नहीं किया गया और कुछ पुरानी संबंध हैं (जैसे सुझाव है कि ओल्सन डेटाबेस ftp://ftp.elsie.nci.nih.gov से उपलब्ध है के रूप में - यह अब उपलब्ध IANA से बजाय है)।

0

आप PHP के साथ MySQL का उपयोग कर रहे हैं, तो विचार है कि MySQL के पहले से ही, "mysql" प्रणाली डेटाबेस में ओल्सन समय क्षेत्र नामों को संग्रहीत करता है एक कॉलम "नाम" कहा जाता है में एक टेबल "TIME_ZONE_NAME" कहा जाता है,। एक विकल्प है कि 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)