ওয়ার্ডপ্রেস সময় অঞ্চল সেটিং কিভাবে পাবেন?


50

কেউ আমাকে বলতে পারেন যে ওয়ার্ডপ্রেস অ্যাডমিনে সেট করা সময় অঞ্চল কীভাবে পাবেন?

উদাহরণস্বরূপ, যদি ব্লগটি পূর্ব সময়ের সেট করা থাকে তবে মুদ্রণের জন্য আমার এই সঠিক স্ট্রিংটি দরকার:

মার্কিন / পূর্ব

এটি আমার থিমের ফাংশন.এফপিতে থাকে এমন একটি ফাংশনের জন্য।

উত্তর:


79

আপনি যদি gmt_offset প্রয়োজন হয়

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

এটি আপনাকে 2 বা -2 এর মতো পূর্ণসংখ্যা দেয় ।

এবং আপনার যদি টাইমজোন স্ট্রিং ব্যবহারের প্রয়োজন হয়

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

এটি আপনাকে আমেরিকা / ইন্ডিয়ানাপলিসের মতো স্ট্রিং দেবে


6
আমার টাইমজোন_ স্ট্রিং ডাটাবেসে রয়েছে তবে সেটিংস পৃষ্ঠায় ভিন্ন টাইমজোন নির্বাচন করার পরেও এটি খালি। কেস হতে পারে? (WP3.6)
ব্যবহারকারী201951515

জিএমটি_অফেষ্ট কি সাইটের টাইমজোন সেটিংয়ের ভিত্তিতে দিবালোকের সঞ্চয়গুলি অ্যাকাউন্টে নেয়?
স্কয়ারকাণ্ডি

6
@ user2019515 আপনি যদি শহরকে টাইমজোন হিসাবে বেছে নেন তবে এটি "টাইমজোন_ স্ট্রিং" বিকল্পে সংরক্ষণ করবে তবে আপনি যদি কোনও ম্যানুয়াল অফসেট (উদাহরণস্বরূপ ইউটিসি + 1) চয়ন করেন তবে এটি "জিএমটি_অফসেট" বিকল্পে ("1" হিসাবে) সংরক্ষণ করা হবে এবং টাইমজোন_স্ট্রিং খালি থাকে
বেরেেন্ড

15

দুর্ভাগ্যজনক পরিস্থিতি হ'ল সত্যই দুটি ভিন্ন বিকল্প রয়েছে:

  1. আরও নতুন timezone_string, যা পিএইচপি – স্টাইলের সময় অঞ্চলটি সংরক্ষণ করে।
  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 ('টাইমজোন_স্ট্রিং') এর উপর নির্ভর করে তবে বাগগুলিতে চলে যাবে।
ডিস্কোআইনফিল্টর

এটা সঠিক উত্তর.
লুকাস বুস্তামন্তে

এর নয ব্যবহার (int)$ জন্য ঘন্টা এবং floor$ সমস্যাযুক্ত মিনিটের জন্য? ডকুমেন্টেশন অনুসারে, (int)এবং -4.5 থেকে -4 বৃত্তাকার floorব্যতীত প্রায় একই রকম (int)এবং floorএটি বৃত্তাকার -5 হবে। দেখে মনে হচ্ছে এটি ভুল নেতিবাচক টাইমজোন অফসেট দেবে?
মাইকপোট

1
@ মাইকপোট হ্যাঁ, এটি অনেক দিন আগে লিবের মধ্যে ঠিক করা হয়েছিল, কেবলমাত্র উত্তরটির কোডের বাসি অনুলিপিটি এখানে।
রর্স্ট

ঈশ্বরের ওহ কেন তারা এটা ভালো বাস্তবায়ন হয়নি .... এটা আমার একটি পূর্ণ ঘন্টা গিয়ে খরচ ঢাল
Blackbam

9

পরীক্ষা করে দেখুন অপশন রেফারেন্স পৃষ্ঠা । বিকল্পটি gmt_offsetএকটি পূর্ণসংখ্যা ফেরত দেয়। উদাহরণস্বরূপ, টাইমজোনটি পূর্ব সময়ের (যেমন আমেরিকা / নিউ_ইয়র্ক) এ সেট করা থাকে, gmt_offset-৫ হওয়া উচিত।


2

ভাববেন না যে আপনি মার্কিন / পূর্বের মতো একটি স্ট্রিং পাবেন যা আপনি চাইছেন এমন সমস্ত স্ট্রিং কোনও অ্যারেতে সংরক্ষণ না করে এবং সেগুলি উল্লেখ না করেই। পিএইচপি ব্যবহার করে আপনি টাইমজোন সংক্ষেপণ পেতে পারেন, অর্থাৎ ইএসটি ; এবং যদি আপনার পছন্দসই স্ট্রিংগুলির সাথে অ্যারেতে সেই মানগুলি থাকে তবে আপনি সেগুলি সন্ধান করতে পারেন।

<?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

বেন্টারনেটে যুক্ত করতে (আমি এটি উত্তর হিসাবে যুক্ত করছি কারণ আমি মন্তব্য করতে পারি না - ডাব্লুপি ডেভলপমেন্ট স্ট্যাকের আমার কম পয়েন্ট রয়েছে)।

ওয়ার্ডপ্রেস কেবলমাত্র টাইমজোন স্ট্রিং সংরক্ষণ করে যদি আপনি সাধারণ সেটিংসে টাইমজোন স্ট্রিং নির্বাচন করেন। ইউটিএফ নির্বাচন এটি তালিকার ডিফল্ট যেখানে, তবে আপনি সময় অঞ্চল স্ট্রিং পর্যন্ত স্ক্রোল করতে পারেন। আপনি যদি টাইমজোন স্ট্রিং সেট করেন তবে ইউটিএফ এবং টাইমজোন স্ট্রিং উভয়ই সেট হয়ে যাবে। সেগুলি একই হবে (অর্থাত্ আপনি যখন সময়স্রোতের স্ট্রিং টাইমজোন নির্বাচন করেন তখন ইউটিএফ নতুন জোনে পুনরায় সেট হয়ে যায়)।

(ওয়ার্ডপ্রেস 4)


0

কয়েকটি বিকল্প রয়েছে, এর মধ্যে কোনটিই সত্যই দুর্দান্ত কাজ করে না। এটি একটি ওয়ার্ডপ্রেস বাগ, এবং এটি সত্যিকারেরভাবে চুষে দেয় কারণ সময়টি ভুল না হলে আপনি নিজের সাইটটি ইউটিসি তে সেট না করেন ... যা বিভ্রান্তিকর এবং সর্বদা এমনকি সম্ভবও নয়।

আমি মনে করি এই পরবর্তী কোডটি কেবলমাত্র যদি আপনি আপনার টাইমজোনকে (সেটিংসের অধীনে -> অ্যাডমিনে জেনারেল হিসাবে) কোনও জিএমটি নম্বর অফসেটের পরিবর্তে একটি নামকৃত শহর হিসাবে বেছে নেন works আমি এটি পরীক্ষা করে দেখিনি তবে এটি খুব সম্ভব যা get_option('gmt_offset')সেট আপ করা হয় যখন get_option('timezone_string')না হয়।

date_default_timezone_set(get_option('timezone_string'));

এর ক্ষতিটি হ'ল ওয়ার্ডপ্রেস ধরে নিয়েছে যে মাইএসকিএল টাইমস্ট্যাম্পগুলি তৈরি করার সময় পিএইচপি ইউটিসি-তে সেট করা আছে, তাই আপনি যখনই টাইমজোনগুলি স্যুইচ করেন তখন আপনি আপনার ডাটাবেসটিকে কিছুটা গণ্ডগোল করতে পারেন! অন্যান্য ডাব্লুপি প্লাগইনগুলির উল্লেখ না করলেই ধরে নিতে পারে যে পিএইচপি পরিবেশটি সর্বদা ইউটিসিতে থাকে।

সুতরাং, যদি আপনি কেবল একটি সঠিক সময় চান - আপনি আপনার টাইমস্ট্যাম্পটিকে ইউটিসিতে থাকতে বাধ্য করতে পারেন:

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

দুর্ভাগ্যক্রমে, যদিও সঠিক, এটি টাইমজোনটিকে ইউটিসিতে সেট করবে।

এবং মনে রাখবেন যে আপনি উভয়ই "সত্য" পতাকা এবং ডিফল্ট টাইমজোন_সেট ফাংশন ব্যবহার করতে পারবেন না ।

যে কোনও উপযুক্ত সমাধান হ'ল একটি কোড-স্নিপেট যা উভয়ের জন্য অ্যাকাউন্ট করে gmt_offsetএবং timezone_stringকিছু ইনপুটটিতে টাইমজোন সেট করতে তাদের ব্যবহার করে। ডাব্লুপি অনুমান করে যে পিএইচপি ইউটিসিতে সেট করে যখন মাইএসকিএল টাইমস্ট্যাম্পগুলি করে এবং এটি অন্যান্য প্লাগইনগুলি ভেঙে দেয়।

Https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ এ এই জাতীয় একটি সমাধান রয়েছে তবে এটি আবার একটি বিইউজি, তাই আপনার 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>";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.