यदि आप स्वयं को MySQL DATE और DATETIME प्रकारों तक सीमित रखते हैं, तो आप MySQL में ही समय क्षेत्र के मुद्दों को काफी हद तक अनदेखा कर सकते हैं। आप MySQL के TIMESTAMP प्रकार से बचना चाहते हैं क्योंकि:
जहां तक DATETIME मानों को पढ़ने/लिखने की बात है, आपको ठीक वही मिलेगा जो आपने डाला है, जो अच्छा है।
इससे आपको हमेशा यह सुनिश्चित करने की समस्या का सामना करना पड़ता है कि आप डेटाबेस में यूटीसी मान लिख रहे हैं।
यह सुनिश्चित करने का सबसे अच्छा तरीका है कि PHP यूटीसी का उपयोग कर रहा है, इसे date_default_timezone_set()
. यह सुनिश्चित करेगा कि कॉल जैसे date('Y-m-d H:i:s')
आपको यूटीसी मूल्य देगा। यह भी सुनिश्चित करेगा कि (new \DateTime('now'))->getTimezone()
जैसा कुछ एक UTC \DateTimeZone उदाहरण लौटाएगा।
आपको निश्चित रूप से ध्यान रखना चाहिए कि जब आप उपयोगकर्ताओं से लिए गए दिनांक/समय मानों को संग्रहीत कर रहे हों तो चीजें काफी कठिन हो जाती हैं। उन मामलों में, आपको किसी तरह यह निर्धारित करने की आवश्यकता होगी कि उपयोगकर्ता किस समय क्षेत्र में है, और मूल्यों को बनाए रखने से पहले यूटीसी में रूपांतरण को संभालना होगा। यह मानते हुए कि आपके उपयोगकर्ताओं के पास कुछ प्रति-उपयोगकर्ता समयक्षेत्र सेटिंग है, आप मूल रूप से कुछ ऐसा करते हैं:
/** @var \DateTimeZone $userTZ */
$userTz = getUserTimezone();
$dateTime = new \DateTime($user_submitted_date_string, $userTz);
$dateTime->setTimezone(new \DateTime('UTC'));
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');