वर्डप्रेस टाइम ज़ोन सेटिंग कैसे प्राप्त करें?


50

क्या कोई मुझे बता सकता है कि वर्डप्रेस एडमिन में सेट किए गए समय क्षेत्र को कैसे प्राप्त किया जाए?

उदाहरण के लिए, यदि ब्लॉग पूर्वी समय पर सेट है, तो मुझे प्रिंट करने के लिए इस सटीक स्ट्रिंग की आवश्यकता है:

अमेरिका / पूर्वी

यह एक फ़ंक्शन के लिए है जो मेरी थीम में functions.php में रहता है।

जवाबों:


79

अगर आपको gmt_offset की आवश्यकता है तो

<?php echo get_option('gmt_offset'); ?>

यह आपको 2 या -2 जैसा पूर्णांक देगा ।

और अगर आपको टाइमजोन स्ट्रिंग उपयोग की आवश्यकता है

<?php echo get_option('timezone_string'); ?>

यह आपको अमेरिका / इंडियानापोलिस की तरह एक तार देगा


6
मेरा टाइमज़ोन_स्ट्रिंग डेटाबेस में है, लेकिन सेटिंग पेज पर एक अलग टाइमज़ोन चुनने के बाद भी यह खाली है। मामला क्या हो सकता है? (WP3.6)
user2019515

क्या साइट के टाइमज़ोन सेटिंग के आधार पर gmt_offest दिन की बचत को ध्यान में रखता है?
चौकोरंडी

6
@ user2019515 यदि आप एक समयक्षेत्र के रूप में एक शहर चुनते हैं, तो यह "टाइमज़ोन_स्ट्रिंग" विकल्प को बचाएगा, लेकिन यदि आप एक मैनुअल ऑफ़सेट (उदाहरण के लिए UTC + 1) चुनते हैं, तो इसे "gmt_offset" विकल्प ("" 1 ") और timezone_string में सहेजा जाता है। खाली रहता है।
बेरेंड

15

दुर्भाग्यपूर्ण स्थिति यह है कि वास्तव में दो अलग-अलग विकल्प हैं:

  1. नया timezone_string, जो PHP- शैली समय क्षेत्र बचाता है।
  2. पुराना gmt_offset, जो घंटों में संख्यात्मक फ्लोट ऑफसेट बचाता है।

लेकिन नए वातावरण में timezone_stringवास्तव में ओवरराइड होता है gmt_offset , बाद के द्वारा लौटाया गया मूल्य पूर्व पर आधारित होगा। हालांकि विपरीत सच नहीं है - gmt_offsetमान्य हो सकता है, जबकि timezone_stringखाली है।

मैंने इन चीजों पर काफी समय बिताया है, और मेरे WpDateTimeपुस्तकालय में लागू किया गया सबसे अधिक वर्तमान समय निम्नलिखित है:

class WpDateTimeZone extends \DateTimeZone {
    /**
     * Determine time zone from WordPress options and return as object.
     *
     * @return static
     */
    public static function getWpTimezone() {
        $timezone_string = get_option( 'timezone_string' );
        if ( ! empty( $timezone_string ) ) {
            return new static( $timezone_string );
        }
        $offset  = get_option( 'gmt_offset' );
        $hours   = (int) $offset;
        $minutes = abs( ( $offset - (int) $offset ) * 60 );
        $offset  = sprintf( '%+03d:%02d', $hours, $minutes );
        return new static( $offset );
    }
}

यह सभी संभावित मामलों में एक सार्थक समय क्षेत्र वस्तु को तत्काल प्राप्त करने की कोशिश करेगा, जब तक कि कोई भी जानकारी उपलब्ध हो।


1
यह स्वीकृत उत्तर होना चाहिए। यदि वे पूरी तरह से get_option ('timezone_string') पर भरोसा करते हैं, तो लोग कीड़े में भाग जाएंगे।
डिस्कोइन्फिल्ट्रेटर

यह सही जवाब है।
लुकास Bustamante

की नहीं है उपयोग (int)$ के लिए घंटे और floor$ समस्याग्रस्त मिनट के लिए? दस्तावेज़ीकरण के अनुसार, (int)और floorलगभग समान हैं सिवाय (int)-4.5 से -4 के floorदौर के और इसे -5 तक गोल किया जाएगा। ऐसा लगता है कि यह गलत नकारात्मक टाइमज़ोन ऑफसेट देगा?
Mikepote

1
@ मायकेपोटे हाँ, यह एक लंबे समय से पहले लिब में तय किया गया था, बस यहां उत्तर में कोड की बासी कॉपी।
Rarst



2

लगता है कि आप एक स्ट्रिंग में उन्हें चाहते हैं और उन्हें संदर्भित करने के बिना सभी तार अमेरिका / पूर्वी की तरह एक स्ट्रिंग प्राप्त करने जा रहे हैं। PHP का उपयोग करके आप टाइमजोन संक्षिप्त नाम प्राप्त कर सकते हैं, अर्थात ईएसटी ; और यदि आपके पास उन मान हैं जिन्हें आप चाहते हैं कि तार के साथ एक सरणी में संग्रहीत हैं, तो आप उन्हें देख सकते हैं।

<?php date_default_timezone_set(get_option('timezone_string'));

      echo date('T'); // will give you three-character string like "EST"

      $timezones = array (
          'EST' => 'US/Eastern',
          'CST' => 'US/Central',
          // etc, etc, etc.
          );

      echo $timezones [ date('T') ]; // should be what you want.
 ?>

यह अनावश्यक है। समय क्षेत्र मानकों 5.2 के बाद से पीएचपी का हिस्सा रहा है, के रूप में है DateTimeZone वस्तु और संबंधित मानक कार्य करता है।
खतरनाक

1

बैनटेनट में जोड़ने के लिए (मैं इसे एक उत्तर के रूप में जोड़ रहा हूं क्योंकि मैं टिप्पणी नहीं कर सकता - मेरे पास WP विकास स्टैक पर 50 से कम अंक हैं)।

यदि आप सामान्य सेटिंग्स में टाइमज़ोन स्ट्रिंग का चयन करते हैं, तो वर्डप्रेस केवल एक टाइमज़ोन स्ट्रिंग संग्रहीत करेगा। UTF चयन वह सूची में चूक है, लेकिन आप टाइमज़ोन स्ट्रिंग्स तक रास्ता स्क्रॉल कर सकते हैं। यदि आप एक टाइमज़ोन स्ट्रिंग सेट करते हैं, तो UTF और Timezone स्ट्रिंग दोनों सेट हो जाएंगे। वे समान होंगे (मतलब, जब आप समय क्षेत्र स्ट्रिंग टाइमज़ोन का चयन करते हैं तो UTF नए क्षेत्र में रीसेट हो जाता है)।

(वर्डप्रेस 4)


0

कुछ विकल्प हैं, जिनमें से कोई भी वास्तव में महान काम नहीं करता है। यह एक वर्डप्रेस बग है, और यह वास्तव में बेकार है क्योंकि समय गलत है जब तक आप अपनी साइट को यूटीसी पर सेट नहीं करते हैं ... जो भ्रामक है और हमेशा संभव भी नहीं है।

यह अगला कोड मुझे लगता है कि केवल तभी काम करता है जब आप GMT नंबर ऑफ़सेट के बजाय एक नामित शहर के रूप में अपना Timezone (सेटिंग्स के तहत - सामान्य में) चुनें। मैंने इसका परीक्षण नहीं किया है लेकिन यह बहुत संभव है कि get_option('gmt_offset')कब सेट किया जाए get_option('timezone_string')

date_default_timezone_set(get_option('timezone_string'));

इसका नकारात्मक पक्ष यह है कि mysql टाइमस्टैम्प बनाते समय वर्डप्रेस PHP को यूटीसी पर सेट कर देता है, इसलिए जब भी आप टाइमज़ोन स्विच करते हैं, तो आप अपने डेटाबेस को थोड़ा गड़बड़ कर सकते हैं! अन्य WP प्लगइन्स का उल्लेख नहीं करना यह मान सकता है कि PHP वातावरण हमेशा यूटीसी में है।

इसलिए, यदि आप सही समय चाहते हैं - तो आप अपने टाइमस्टैम्प को UTC में रखने के लिए बाध्य कर सकते हैं:

get_post_time('c', true); //should work for non-post objects.

दुर्भाग्य से, हालांकि सही है, यह समयक्षेत्र को UTC के लिए सेट कर देगा।

और ध्यान दें कि आप दोनों "सत्य" ध्वज और डिफ़ॉल्ट टाइमज़ोन_सेट फ़ंक्शन का उपयोग नहीं कर सकते ।

किसी भी उचित समाधान के लिए एक कोड-स्निपेट होना चाहिए जो दोनों के लिए खाता है gmt_offsetऔर timezone_stringकुछ इनपुट पर टाइमज़ोन सेट करने के लिए उनका उपयोग करता है। WP मानता है कि जब mysql टाइमस्टैम्प कर रहा है तो PHP UTC में सेट हो गया है, और यह अन्य प्लगइन्स को तोड़ सकता है।

Https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ पर ऐसा एक समाधान है , लेकिन, फिर से यह एक BUG है, इसलिए आपको get_post_time($date_format, TRUE)टाइमस्टैम्प प्राप्त करने के लिए कोड का उपयोग करना चाहिए वास्तव में सही है।


0

इस तथ्य को देखते हुए कि वर्डप्रेस विकल्प तालिका में टाइमज़ोन स्ट्रिंग रखता है, आप अपने वर्डप्रेस साइट पर सही समय प्राप्त करने के ऑब्जेक्ट उन्मुख तरीके का उपयोग कर सकते हैं:

$tz = new DateTimeZone(get_option('timezone_string'));
$dt = new DateTime("now", $tz);

$page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.