मुझे लगता है कि समस्या के कुछ बारीकियों के साथ क्या करना है strtotime()
।
strtotime()
बस किसी भी स्ट्रिंग के बारे में ले सकते हैं, और इसे यूनिक्स टाइमस्टैम्प में बदल सकते हैं। समस्या यह है कि जब स्ट्रिंग में एक स्पष्ट समय क्षेत्र नहीं होता है, तो यह उस चीज़ का उपयोग करेगा जो इसके द्वारा निर्धारित है date_default_timezone_get()
। इसे वर्तमान उपयोगकर्ता से सेट किया जाना चाहिए, हालांकि (यह खाता प्रॉक्सी द्वारा सेट किया गया है)। हालाँकि, जिस स्ट्रिंग को आप खींच रहे हैं, वह $node->field_date->value
UTC में निहित है। दूसरे शब्दों में, मुझे लगता है कि स्ट्रिंग की strtotime()
व्याख्या 'अमेरिका / न्यू_यॉर्क' के रूप में की जा रही है न कि 'यूटीसी' की।
अच्छी खबर यह है कि आप अपनी स्थिति को बहुत सरल कर सकते हैं। दिनांक सीमा के लिए फ़ील्ड आइटम में चार भाग होते हैं
- UTC में 'वैल्यू' एक स्ट्रिंग के रूप में शुरुआत की तारीख है
- 'start_date' एक DrupalDateTime ऑब्जेक्ट है जो 'मान' का प्रतिनिधित्व करता है
- UTC में एक स्ट्रिंग के रूप में 'end_value' अंतिम तिथि है
- 'end_date' एक DrupalDateTime ऑब्जेक्ट है जो 'end_value' का प्रतिनिधित्व करता है
एक सादे तिथि समय क्षेत्र के लिए वे हैं
- 'मान' UTC में एक स्ट्रिंग के रूप में तारीख है
- 'दिनांक' एक DrupalDateTime ऑब्जेक्ट है जो 'मान' का प्रतिनिधित्व करता है
तो, आप DrupalDateTime()
सीधे ऑब्जेक्ट के साथ काम कर सकते हैं। इसके अलावा, वहdate.formatter
सेवा को उपयोगकर्ता द्वारा पृष्ठ को डिफ़ॉल्ट रूप से देखने के लिए (उपयोगकर्ता की सक्रिय भाषा का उपयोग करने के अलावा) द्वारा उचित समय क्षेत्र में उपयोग करना चाहिए।
मुझे संदेह है कि ऐसा कुछ काम करेगा
$node = Node::load(2100);
$start_date = $node->field_date->start_date;
$formatted = \Drupal::service('date.formatter')->format(
$start_date->getTimestamp(), 'custom', 'Y-m-d H:i:s P'
);
नोट मैंने 'P' फॉर्मेट प्लेसहोल्डर को वहां जोड़ा है ताकि आप देख सकें कि सिस्टम किस समय का उपयोग करने के लिए सोच रहा है।
सुनिश्चित करें कि आपके पास व्यवस्थापक / कॉन्फ़िगरेशन / क्षेत्रीय / सेटिंग्स पर उचित टाइमज़ोन सेट अप है, और आपका उपयोगकर्ता टाइमज़ोन वही है जो आप अपेक्षा कर रहे हैं। यह भी सुनिश्चित करें कि आपके php.ini में उचित समय-क्षेत्र सेट है (यह date.timezone
सेटिंग है); जब यह सेट नहीं किया जाता है तो अजीब चीजें होती हैं (और मेरे सिर के ऊपर से, मुझे याद नहीं है कि अगर इंस्टॉलर में चेतावनी का कारण बनता है या सेट नहीं होने पर स्टेटस रिपोर्ट में। मुझे समस्या याद है, लेकिन यह नहीं है कि क्या यह मिला है प्रतिबद्ध)।
date
DrupalDateTime तक पहुँचने की सुविधा के बारे में नहीं पता था । जिज्ञासा से बाहर आपने यह कैसे पता लगाया? मैं यह पता लगाने में सक्षम था कि मेरा क्षेत्र किस प्रकार का था,DateTimeItem
लेकिन वहाँ यह स्पष्ट नहीं है कि उस वर्ग के लिएdate
(याvalue
) सार्वजनिक सदस्य है।