2008-08-20 13 views
11

हम में से जो मानक साझा होस्टिंग पैकेज जैसे गोडाडी या नेटवर्क सॉल्यूशंस का उपयोग करते हैं, आप अपने होस्टिंग सर्वर (PHP) और MySQL सर्वर में डेटाटाइम रूपांतरण कैसे प्रबंधित करते हैं अलग-अलग समय क्षेत्र?अलग-अलग समय क्षेत्रों में PHP सर्वर और MySQL सर्वर से निपटने

इसके अलावा, क्या किसी के पास यह निर्धारित करने के लिए कुछ सर्वोत्तम अभ्यास सलाह है कि आपकी साइट पर एक विज़िटर किस समय क्षेत्र में है और डेटाटाइम वैरिएबल को उचित तरीके से जोड़ रहा है?

उत्तर

17

PHP के रूप में करे 5.1.0 आप डिफ़ॉल्ट एक स्क्रिप्ट में सभी दिनांक/समय कार्यों द्वारा प्रयोग किया जाता समय क्षेत्र सेट करने के लिए date_default_timezone_set() फ़ंक्शन का उपयोग कर सकते हैं।

MySQL के लिए (MySQL Server Time Zone Support पेज से उद्धृत) MySQL 4.1.3 से पहले

, सर्वर केवल सिस्टम समय स्टार्टअप पर सेट क्षेत्र में चल रही है। MySQL 4.1.3 के साथ शुरुआत, सर्वर कई समय क्षेत्र सेटिंग्स को बनाए रखता है, जिनमें से कुछ रनटाइम पर संशोधित किया जा सकता है।

आप की रुचि का

प्रति कनेक्शन समय क्षेत्र, जो आप अपनी स्क्रिप्ट

SET timezone = 'Europe/London'; 

ग्राहक समय क्षेत्र सेटिंग का पता लगाने के लिए के रूप में की शुरुआत में प्रयोग करेंगे की सेटिंग है, आप थोड़ा इस्तेमाल कर सकते हैं उस जानकारी को कुकी में प्राप्त करने और सहेजने के लिए जावास्क्रिप्ट का, और उचित समय क्षेत्र की गणना करने के लिए, बाद के पृष्ठ पर इसका उपयोग करता है।

//Returns the offset (time difference) between Greenwich Mean Time (GMT) 
//and local time of Date object, in minutes. 
var offset = new Date().getTimezoneOffset(); 
document.cookie = 'timezoneOffset=' + escape(offset); 

या आप उपयोगकर्ताओं को अपने समय क्षेत्र को सेट करने के लिए chioce प्रदान कर सकते हैं।

11

सब कुछ यूटीसी के रूप में स्टोर करें। आप ग्राहक स्तर पर या क्लाइंट सेटिंग्स का उपयोग कर सर्वर पक्ष पर रूपांतरण कर सकते हैं।

php - date

mysql - utc-timestamp

+0

+1 मैं शिफ़्टी आंखों से देखने के लेकिन मैं हमेशा एक हस्ताक्षरित रूप में यूनिक्स/युग समय की दुकान int (तारीख गणित के लिए हस्ताक्षर करना चाहते हैं)। कभी भी भ्रम नहीं होता और सरकार टीजेड शिफ्ट से बचता है। – Xailor

+0

+1, डेटा स्तर पर चीजों को सरल और सामान्यीकृत (= यूटीसी में) रखने से तर्क गलत हो जाता है। किसी भी लोकेल-विशिष्ट रूपांतरण केवल प्रदर्शन स्तर पर किया जाना चाहिए। – Kos

0

मैं अपनी सभी तिथियों को डेटटाइम प्रकार से पहले के मुद्दों के कारण एक बड़ी वजह के रूप में सहेजता हूं। मैं उस समय() PHP फ़ंक्शन का परिणाम सहेजता हूं, अब वे एक ही समय क्षेत्र में होने के रूप में गिनते हैं :)

3

आरई Željko Živković से उत्तर, 'यूरोप/लंदन' जैसे टाइमज़ोन वर्णनकर्ता केवल तभी काम करते हैं जब mySQL व्यवस्थापक सिस्टम में टाइमज़ोन टेबल जोड़ दिया है, और उन्हें अद्यतन रखता है।

अन्यथा आप '-4: 00' जैसे संख्यात्मक ऑफसेट तक ही सीमित हैं। सौभाग्य से php तिथि ('पी') प्रारूप यह (5.1.3) के रूप में प्रदान करता है

तो कहते हैं में से एक एप्लिकेशन कॉन्फ़िग फ़ाइल आप

define('TZ', 'US/Pacific'); 
.... 
if (defined('TZ') && function_exists('date_default_timezone_set')) { 
    date_default_timezone_set(TZ); 
    $mdb2->exec("SET SESSION time_zone = " . $mdb2->quote(date('P'))); 
} 

हो सकता है यह पीएचपी का मतलब है और mySQL क्या समय क्षेत्र पर सहमत होंगे उपयोग करने के लिए ऑफसेट।

समय मूल्यों को संग्रहीत करने के लिए हमेशा TIMESTAMP का उपयोग करें। कॉलम वास्तव में UNIX_TIME (युग) के रूप में संग्रहीत किया जाता है लेकिन जब लिखा जाता है तो वर्तमान समय_ज़ोन ऑफसेट से स्पष्ट रूप से परिवर्तित किया जाता है, और पढ़ने पर वापस आ जाता है।

यदि आप अन्य समय क्षेत्रों में उपयोगकर्ताओं के लिए समय प्रदर्शित करना चाहते हैं, तो वैश्विक परिभाषा() के बजाय, उपर्युक्त में दिए गए टाइमज़ोन को सेट करें।TIMESTAMP मान स्वचालित रूप से समय अपने अनुप्रयोग परिणाम सेट (जो कभी कभी एक समस्या हो सकती है, अगर आप वास्तव में घटना के मूल समय क्षेत्र पता करने के लिए भी तो यह एक और स्तंभ में होने की जरूरत है की जरूरत है)

देखता द्वारा mySQL द्वारा परिवर्तित किया जाएगा

और जहाँ तक, आप की तुलना करने और तारीखों को मान्य करने की क्षमता खो करता है, और आप का मतलब हमेशा ऐप्लिकेशन स्तर पर तारीख प्रतिनिधित्व करने के लिए कन्वर्ट करने के लिए है (और पर कठिन है "क्यों सिर्फ पूर्णांक के रूप में हर समय की दुकान नहीं", आँखें जब आप डेटा पर सीधे देख रहे हैं - जल्दी, क्या 1254369600 पर हुआ)

0

php सेट समय क्षेत्र में php.ini फ़ाइल में से: ini_set("date.timezone", "America/Los_Angeles");

?

या विशेष पृष्ठ में आप कर सकते हैं की तरह: date_default_timezone_set("America/Los_Angeles");

mysql आप की तरह कर सकते हैं: SET GLOBAL time_zone = 'America/Los_Angeles';

संबंधित मुद्दे