आरई Ž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 पर हुआ)
+1 मैं शिफ़्टी आंखों से देखने के लेकिन मैं हमेशा एक हस्ताक्षरित रूप में यूनिक्स/युग समय की दुकान int (तारीख गणित के लिए हस्ताक्षर करना चाहते हैं)। कभी भी भ्रम नहीं होता और सरकार टीजेड शिफ्ट से बचता है। – Xailor
+1, डेटा स्तर पर चीजों को सरल और सामान्यीकृत (= यूटीसी में) रखने से तर्क गलत हो जाता है। किसी भी लोकेल-विशिष्ट रूपांतरण केवल प्रदर्शन स्तर पर किया जाना चाहिए। – Kos