इसलिए, अगर मेरे पास एक स्ट्रिंग है जैसे: "2017-12-01T16: 03: 00" और इस स्ट्रिंग को टाइमज़ोन में बदलने की आवश्यकता है America/New_York
, इस स्ट्रिंग को कैसे बदलें? निश्चित रूप से नहीं कि क्या T
स्ट्रिंग में कर रहा है और क्या यह बिल्कुल के लिए है।
मैं इसके लिए सही विधि पर उत्सुक हूं, जबकि मेरा मानना है कि T
यहाँ महत्वपूर्ण है, मैं इसका उद्देश्य समझता हूँ। मैंने यहाँ क्या करने की कोशिश की:
$string = "2017-12-01T16:03:00";
$time_fix = explode("T", $string);
if (count($time_fix) > 1)
{
$data_date = DateTime::createFromFormat("Y-m-d H:i:s", $time_fix[0] . " " . $time_fix[1]);
$output = $data_date->format("Y-m-d H:i:s", new DateTimeZone("America/New_York"));
} else {
$data_date = DateTime::createFromFormat("Y-m-d H:i:s", $time_fix[0] . " 00:00:00");
$output = $data_date->format("Y-m-d H:i:s", new DateTimeZone("America/New_York"));
}
वास्तव में यकीन नहीं है कि यह समय-क्षेत्र को परिवर्तित कर रहा है या नहीं, इसलिए इस पर सोच रहा है कि इस पर आपके विचार क्या हैं? होगा $output
चर दिनांक और समय के लिए होते हैं America/New_York
समय क्षेत्र? इसका परीक्षण करना बहुत मुश्किल है क्योंकि मुझे पता नहीं है कि समय स्ट्रिंग के बनने के समय क्या है, यह वर्तमान में है।
इसके अलावा, यह सोचकर कि क्या यहां टी महत्वपूर्ण है और इसका क्या मतलब है। और कैसे ठीक से यह करने के लिए America/New_York
समय क्षेत्र?
अद्यतन करें
जाहिर है, मुझे पता चला कि सर्वर टाइमज़ोनकि एपीआई के माध्यम से इन तारीख तार पैदा कर रहा है पूर्वी मानक समय में पहले से ही है। लेकिन अगर मुझे यह पता नहीं है, तो इसे यूटीसी में कैसे बदला जाएगा? एपीआई के डेवलपर्स का कहना है कि यह 8601 प्रारूप में यूटीसी है, लेकिन टाइमज़ोन ईएसटी है। इससे मुझे कोई मतलब नहीं है। क्योंकि, मुझे विश्वास है। ईएसटी यूटीसी -5 है, केवल यूटीसी नहीं। मुझे यह कैसे पता होना चाहिए कि एपीआई से अनुचित तरीके से संभाला गया यूटीसी टाइमज़ोन स्ट्रिंग परिणाम क्या है? क्या मैं यह बताते हुए सही हूं? 2017-12-01T16:03:00
UTC टाइमज़ोन से EST टाइमज़ोन के लिए सही स्ट्रिंग नहीं है?
उत्तर:
उत्तर № 1 के लिए 1यदि तुम करो:
$date = new DateTime($info["CreateDate"]);
$date->setTimeZone(new DateTimeZone("UTC"));
$date->setTimeZone(new DateTimeZone("America/New_York"));
$output = $date->format("Y-m-d H:i:s");
आप पहले अपने डिफ़ॉल्ट टाइमज़ोन में डेटटाइम ऑब्जेक्ट बना रहे हैं जो टाइमस्टैम्प गणना को प्रभावित करेगा, और फिर टाइमज़ोन को बदल देगा। इसके बजाय, यूटीसी इनपुट मानते हुए, आपको ऐसा करना चाहिए:
$date = new DateTime($info["CreateDate"], new DateTimeZone("UTC"));
$date->setTimeZone(new DateTimeZone("America/New_York"));
$output = $date->format("Y-m-d H:i:s");
इस तरह DateTime ऑब्जेक्ट की व्याख्या करेगायूटीसी समय के रूप में इनपुट तिथि और टाइमस्टैम्प की सही गणना करें। फिर टाइमज़ोन सेट करना सिर्फ सही तारीख स्ट्रिंग प्राप्त करना है, यह अंतर्निहित टाइमस्टैम्प को प्रभावित नहीं करता है।
मुझे लगता है कि आईएसओ 8601 तिथि तार निर्दिष्ट कर सकते हैंयूटीसी ऑफ़सेट्स इस विशेष मामले में आप इसे निर्दिष्ट किए बिना दूर हो सकते हैं क्योंकि कोई ऑफसेट नहीं दिया जाता है। इस मामले में भी कोई फर्क नहीं पड़ेगा अगर आपका डिफ़ॉल्ट समयक्षेत्र यूटीसी है।
नए डेटा पर आधारित संपादन:
यदि आप जानते हैं कि इनपुट पूर्वी मानक समयक्षेत्र में है, तो उस दिनांक को बदलने का प्रयास करें जहाँ आप DateTime ऑब्जेक्ट का निर्माण करते हैं।
$date = new DateTime($info["CreateDate"], new DateTimeZone("EST"));
$date->setTimeZone(new DateTimeZone("America/New_York"));
$output = $date->format("Y-m-d H:i:s");
जवाब के लिए 0 № 2
विस्फोट अपने अलग $string
तत्वों पर 2017-12-01
तथा 16:03:45
। और यहाँ आपके पास जवाब है Php में टाइमजोन रूपांतरण