/ / टी के साथ स्ट्रिंग को एक विशिष्ट टाइमज़ोन में कैसे परिवर्तित करें? - php, दिनांक, डेटाइम, टाइमज़ोन

कैसे एक विशिष्ट समय क्षेत्र के लिए टी के साथ स्ट्रिंग कंवर्ट करने के लिए?-php, दिनांक, datetime, समय क्षेत्र

इसलिए, अगर मेरे पास एक स्ट्रिंग है जैसे: "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 में टाइमजोन रूपांतरण