मैंने एक साल पहले एक निजी जेट ऑपरेटर के लिए लिखे गए PHP/MySQL एप्लिकेशन में इस स्थिति से बड़े पैमाने पर निपटाया। इन दो प्लेटफार्मों में टाइमज़ोन को संभालने के लिए अलग-अलग रणनीतियां हैं, लेकिन मैं समझाऊंगा कि मैंने इसे कैसे किया। मैंने MySQL सर्वर को UTC पर सेट किया है और प्रत्येक PHP स्क्रिप्ट को उस टाइमज़ोन में चलाया है जिसे उपयोगकर्ता उपयोगकर्ता प्रोफ़ाइल के लिए साइनअप प्रक्रिया के दौरान निर्दिष्ट करता है।
MySQL और PHP (PHP 5.2 और ऊपर) दोनों में मूल डेटाटाइम डेटाटाइप हैं। MySQL का डेटाटाइम एक आदिम डेटा प्रकार है, जबकि PHP 5.2 और इसके बाद के संस्करण बिल्ट-इन डेटटाइम क्लास . MySQL डेटाटाइम डेटाटाइप में टाइमज़ोन के लिए मेटाडेटा शामिल नहीं है, लेकिन PHP डेटटाइम ऑब्जेक्ट में हमेशा टाइमज़ोन शामिल होता है। यदि PHP डेटाटाइम कंस्ट्रक्टर दूसरे तर्क में वैकल्पिक टाइमज़ोन निर्दिष्ट नहीं करता है, तो PHP डेटाटाइम कंस्ट्रक्टर php पर्यावरण चर का उपयोग करता है।
MySQL और PHP दोनों में कॉन्फ़िगरेशन फ़ाइलों में डिफ़ॉल्ट टाइमज़ोन सेट है। MySQL कॉन्फ़िगरेशन फ़ाइल में सेट किए गए डेटाटाइम का उपयोग करता है
ए> प्रत्येक डीबी कनेक्शन के लिए जब तक उपयोगकर्ता SET time_zone = [timezone];
कमांड के साथ कनेक्शन शुरू होने के बाद एक अलग टाइमज़ोन निर्दिष्ट नहीं करता है। . PHP सर्वर कॉन्फ़िगरेशन फ़ाइल में सेट किए गए टाइमज़ोन का उपयोग करके प्रत्येक स्क्रिप्ट के लिए एक टाइमज़ोन पर्यावरण चर भी सेट करता है, और इस पर्यावरण चर को PHP फ़ंक्शन का उपयोग करके ओवरराइड किया जा सकता है date_default_timezone_set()
स्क्रिप्ट शुरू होने के बाद।
PHP डेटटाइम क्लास में टाइमज़ोन . नामक एक प्रॉपर्टी होती है , जो एक PHP DateTimeZone ऑब्जेक्ट है . डेटटाइमज़ोन ऑब्जेक्ट सटीक समय क्षेत्र के लिए एक स्ट्रिंग का उपयोग करके निर्दिष्ट किया गया है। समय क्षेत्रों की सूची व्यापक है, जिसमें दुनिया भर में सैकड़ों व्यक्तिगत समय क्षेत्र हैं। PHP समय क्षेत्र स्वचालित रूप से डेलाइट बचत समय के लिए जिम्मेदार होंगे।
जब उपयोगकर्ता वेब ऐप में डेटाटाइम उत्पन्न करता है, तो उपयोगकर्ता के प्रोफाइल के टाइमज़ोन में एक PHP डेटाटाइम ऑब्जेक्ट बनाएं। फिर setTimezone
का उपयोग करें
डेटटाइम ऑब्जेक्ट को यूटीसी टाइमज़ोन में संशोधित करने की विधि। अब आपके पास यूटीसी में उपयोगकर्ता का डेटाटाइम है, और आप मान को डेटाबेस में संग्रहीत कर सकते हैं। दिनांक समय format
का उपयोग करें
MySQL द्वारा स्वीकृत प्रारूप में डेटा को एक स्ट्रिंग के रूप में व्यक्त करने की विधि।
तो उपयोगकर्ता एक डेटाटाइम उत्पन्न करता है, और आप उपयोगकर्ता के निर्दिष्ट समय क्षेत्र में एक PHP डेटाटाइम ऑब्जेक्ट बनाते हैं:
// set using an include file for user profile
$user_timezone = new DateTimeZone('America/New_York');
// 1st arg in format accepted by PHP strtotime
$date_object1 = new DateTime('8/9/2012 5:19 PM', $user_timezone);
$date_object1->setTimezone(new DateTimeZone('UTC'));
$formated_string = $date_object1->format('Y-m-d H:i:s');
$query_string = "INSERT INTO `t_table1` (`datetime1`) VALUES('$formated_string')";
जब आप डेटाबेस से मूल्य प्राप्त करते हैं, तो यूटीसी में निर्माण करें और फिर उपयोगकर्ता के समय क्षेत्र में कनवर्ट करें।
$query_string = "SELECT `datetime1` FROM `t_table1`";
$date_object1 = new DateTime($datetime_string_from_mysql, new DateTimeZone('UTC'));
$date_object1->setTimezone($user_timezone);
$string_for_display_in_application = $date_object1->format('m/d/Y g:i a');
इस पद्धति का उपयोग करते हुए, आपके डेटाटाइम मान हमेशा यूटीसी में डीबी के अंदर संग्रहीत होते हैं, और उपयोगकर्ता हमेशा अपने प्रोफ़ाइल के समय क्षेत्र में मूल्यों का अनुभव करता है। प्रत्येक समय क्षेत्र के लिए यदि आवश्यक हो तो PHP डेलाइट सेविंग टाइम के लिए सही करेगा।
एक गोचा:यह स्पष्टीकरण MySQL टाइमस्टैम्प डेटाटाइप को कवर नहीं करता है। मैं डेटाटाइम मानों को संग्रहीत करने के लिए MySQL डेटाटाइम डेटाटाइप का उपयोग करने की अनुशंसा करता हूं, टाइमस्टैम्प डेटाटाइप नहीं। टाइमस्टैम्प डेटाटाइप यहां मैनुअल में कवर किया गया है ।
संपादित करें: आप listIdentifiers का उपयोग करके प्रत्येक PHP टाइमज़ोन स्ट्रिंग वाली एक सरणी बना सकते हैं। , जो डेटटाइमज़ोन वर्ग की एक स्थिर विधि है।