উত্তর:
আপনি যদি gmt_offset প্রয়োজন হয়
<?php echo get_option('gmt_offset'); ?>
এটি আপনাকে 2 বা -2 এর মতো পূর্ণসংখ্যা দেয় ।
এবং আপনার যদি টাইমজোন স্ট্রিং ব্যবহারের প্রয়োজন হয়
<?php echo get_option('timezone_string'); ?>
এটি আপনাকে আমেরিকা / ইন্ডিয়ানাপলিসের মতো স্ট্রিং দেবে
দুর্ভাগ্যজনক পরিস্থিতি হ'ল সত্যই দুটি ভিন্ন বিকল্প রয়েছে:
timezone_string
, যা পিএইচপি – স্টাইলের সময় অঞ্চলটি সংরক্ষণ করে।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 );
}
}
এটি যতক্ষণ পর্যন্ত কোনও তথ্য উপলব্ধ থাকে ততক্ষণ সম্ভাব্য সকল ক্ষেত্রে একটি অর্থবহ সময় অঞ্চল অবজেক্টটি ইনস্ট্যান্ট করার চেষ্টা করবে।
(int)
$ জন্য ঘন্টা এবং floor
$ সমস্যাযুক্ত মিনিটের জন্য? ডকুমেন্টেশন অনুসারে, (int)
এবং -4.5 থেকে -4 বৃত্তাকার floor
ব্যতীত প্রায় একই রকম (int)
এবং floor
এটি বৃত্তাকার -5 হবে। দেখে মনে হচ্ছে এটি ভুল নেতিবাচক টাইমজোন অফসেট দেবে?
পরীক্ষা করে দেখুন অপশন রেফারেন্স পৃষ্ঠা । বিকল্পটি gmt_offset
একটি পূর্ণসংখ্যা ফেরত দেয়। উদাহরণস্বরূপ, টাইমজোনটি পূর্ব সময়ের (যেমন আমেরিকা / নিউ_ইয়র্ক) এ সেট করা থাকে, gmt_offset
-৫ হওয়া উচিত।
ভাববেন না যে আপনি মার্কিন / পূর্বের মতো একটি স্ট্রিং পাবেন যা আপনি চাইছেন এমন সমস্ত স্ট্রিং কোনও অ্যারেতে সংরক্ষণ না করে এবং সেগুলি উল্লেখ না করেই। পিএইচপি ব্যবহার করে আপনি টাইমজোন সংক্ষেপণ পেতে পারেন, অর্থাৎ ইএসটি ; এবং যদি আপনার পছন্দসই স্ট্রিংগুলির সাথে অ্যারেতে সেই মানগুলি থাকে তবে আপনি সেগুলি সন্ধান করতে পারেন।
<?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.
?>
বেন্টারনেটে যুক্ত করতে (আমি এটি উত্তর হিসাবে যুক্ত করছি কারণ আমি মন্তব্য করতে পারি না - ডাব্লুপি ডেভলপমেন্ট স্ট্যাকের আমার কম পয়েন্ট রয়েছে)।
ওয়ার্ডপ্রেস কেবলমাত্র টাইমজোন স্ট্রিং সংরক্ষণ করে যদি আপনি সাধারণ সেটিংসে টাইমজোন স্ট্রিং নির্বাচন করেন। ইউটিএফ নির্বাচন এটি তালিকার ডিফল্ট যেখানে, তবে আপনি সময় অঞ্চল স্ট্রিং পর্যন্ত স্ক্রোল করতে পারেন। আপনি যদি টাইমজোন স্ট্রিং সেট করেন তবে ইউটিএফ এবং টাইমজোন স্ট্রিং উভয়ই সেট হয়ে যাবে। সেগুলি একই হবে (অর্থাত্ আপনি যখন সময়স্রোতের স্ট্রিং টাইমজোন নির্বাচন করেন তখন ইউটিএফ নতুন জোনে পুনরায় সেট হয়ে যায়)।
(ওয়ার্ডপ্রেস 4)
কয়েকটি বিকল্প রয়েছে, এর মধ্যে কোনটিই সত্যই দুর্দান্ত কাজ করে না। এটি একটি ওয়ার্ডপ্রেস বাগ, এবং এটি সত্যিকারেরভাবে চুষে দেয় কারণ সময়টি ভুল না হলে আপনি নিজের সাইটটি ইউটিসি তে সেট না করেন ... যা বিভ্রান্তিকর এবং সর্বদা এমনকি সম্ভবও নয়।
আমি মনে করি এই পরবর্তী কোডটি কেবলমাত্র যদি আপনি আপনার টাইমজোনকে (সেটিংসের অধীনে -> অ্যাডমিনে জেনারেল হিসাবে) কোনও জিএমটি নম্বর অফসেটের পরিবর্তে একটি নামকৃত শহর হিসাবে বেছে নেন 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)
টাইমস্ট্যাম্প পেতে কোডটি ব্যবহার করা উচিত যা আসলে সঠিক।
ওয়ার্ডপ্রেস বিকল্প সারণীতে টাইমজোন স্ট্রিং রাখে এই সত্যটি প্রদত্ত, আপনি আপনার ওয়ার্ডপ্রেস সাইটে সঠিক সময় পাওয়ার জন্য অবজেক্ট ওরিয়েন্টেড উপায়টি ব্যবহার করতে পারেন:
$tz = new DateTimeZone(get_option('timezone_string'));
$dt = new DateTime("now", $tz);
$page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";