जबकि @drrcknlsn यह दावा करने के लिए सही है कि एक टाइम स्ट्रिंग को डेटामाइम में बदलने के कई तरीके हैं, यह महसूस करना महत्वपूर्ण है कि ये विभिन्न तरीके टाइमज़ोन के साथ एक ही तरीके से व्यवहार नहीं करते हैं।
विकल्प 1 : DateTime('@' . $timestamp)
निम्नलिखित कोड पर विचार करें:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
strtotime
बिट समाप्त समय क्षेत्र जानकारी, और date_create
समारोह जीएमटी मान लिया गया है ( Europe/Brussels
)।
जैसे, आउटपुट निम्न होगा, चाहे मैं इसे किस सर्वर पर चलाऊं:
2011-12-12T13:17:52+00:00
विकल्प 2 : date_create()->setTimestamp($timestamp)
निम्नलिखित कोड पर विचार करें:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
आप उम्मीद कर सकते हैं कि यह एक ही आउटपुट का उत्पादन करे। हालाँकि, यदि मैं एक बेल्जियन सर्वर से इस कोड को निष्पादित करता हूं, तो मुझे निम्न आउटपुट मिलते हैं:
2011-12-12T14:17:52+01:00
date_create
फ़ंक्शन के विपरीत , setTimestamp
विधि 'Europe/Brussels'
GMT के बजाय सर्वर ( मेरे मामले में) के समय क्षेत्र को मानती है ।
स्पष्ट रूप से अपना समय क्षेत्र निर्धारित करना
यदि आप यह सुनिश्चित करना चाहते हैं कि आपका आउटपुट आपके इनपुट के समय क्षेत्र से मेल खाता है, तो इसे स्पष्ट रूप से सेट करना सबसे अच्छा है।
निम्नलिखित कोड पर विचार करें:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
अब, निम्नलिखित कोड पर भी विचार करें:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
क्योंकि हम स्पष्ट रूप से इनपुट के मिलान के लिए आउटपुट का समय क्षेत्र निर्धारित करते हैं, दोनों समान (सही) आउटपुट बनाएंगे:
2011-12-12T21:17:52+08:00