কোনও লাইব্রেরি ব্যবহার না করে আশা করি কোনও তারিখের স্ট্যাম্পটিকে ইউটিসিতে রূপান্তর করার জন্য আমার সহজ প্রয়োজন (
উত্তর:
গেটটাইমোন এবং সেট টাইমজোন চেষ্টা করে দেখুন, উদাহরণটি দেখুন
(তবে এটি একটি ক্লাস ব্যবহার করে)
হালনাগাদ:
কোনও ক্লাস ছাড়াই আপনি এরকম কিছু চেষ্টা করতে পারেন:
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "<br />");
echo(date("Y-d-mTG:i:sz",$the_date) . "<br />");
echo(date_default_timezone_set("UTC") . "<br />");
echo(date("Y-d-mTG:i:sz", $the_date) . "<br />");
দ্রষ্টব্য: আপনারও টাইমজোনটি আবার মূলতে সেট করতে হবে
ডেটটাইম ব্যবহার:
$given = new DateTime("2014-12-12 14:18:00");
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 14:18:00 Asia/Bangkok
$given->setTimezone(new DateTimeZone("UTC"));
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 07:18:00 UTC
এইভাবে করুন:
gmdate('Y-m-d H:i:s', $timestamp)
বা সহজভাবে
gmdate('Y-m-d H:i:s')
ইউটিসিতে "এখন" পেতে।
রেফারেন্স পরীক্ষা করুন:
YYYY-MM-HH dd: মিমি: এস এই ফর্ম্যাটে আপনার যদি একটি তারিখ থাকে তবে আপনি আপনার "ডেটটাইম স্ট্রিং" এর শেষে একটি ইউটিসি যুক্ত করে পিএইচপি চালিত করতে পারেন এবং রূপান্তর করতে স্ট্রোটটাইম ব্যবহার করতে পারেন।
date_default_timezone_set('Europe/Stockholm');
print date('Y-m-d H:i:s',strtotime("2009-01-01 12:00"." UTC"))."\n";
print date('Y-m-d H:i:s',strtotime("2009-06-01 12:00"." UTC"))."\n";
এটি এটি মুদ্রণ করবে:
2009-01-01 13:00:00
2009-06-01 14:00:00
এবং আপনি দেখতে পাচ্ছেন এটি দিবালোকের সময় সাশ্রয় সময় সমস্যারও যত্ন করে।
এটি সমাধান করার জন্য একটি অদ্ভুত উপায় .... :)
:D
স্থানীয় সময় অঞ্চল স্ট্রিংটিকে ইউটিসি স্ট্রিতে রূপান্তর করুন।
যেমন নিউজিল্যান্ড সময় অঞ্চল
$datetime = "2016-02-01 00:00:01";
$given = new DateTime($datetime, new DateTimeZone("Pacific/Auckland"));
$given->setTimezone(new DateTimeZone("UTC"));
$output = $given->format("Y-m-d H:i:s");
echo ($output);
আপনি যদি পিএইচপি-র ডেটটাইম ক্লাসটি ব্যবহার করতে আপত্তি করেন না , যা পিএইচপি 5.2.0 থেকে পাওয়া যায়, তবে বিভিন্ন পরিস্থিতিতে এমন পরিস্থিতি রয়েছে যা আপনার পরিস্থিতির সাথে খাপ খায়:
আপনার যদি $givenDt
ডেটটাইম অবজেক্ট থাকে যা আপনি ইউটিসিতে রূপান্তর করতে চান তবে এটি এটি ইউটিসিতে রূপান্তর করবে:
$givenDt->setTimezone(new DateTimeZone('UTC'));
আপনার যদি $givenDt
পরে আসলটির প্রয়োজন হয় তবে ক্লোন করা বস্তুর রূপান্তর করার আগে আপনি বিকল্পভাবে প্রদত্ত ডেটটাইম অবজেক্টটি ক্লোন করতে চাইতে পারেন:
$utcDt = clone $givenDt;
$utcDt->setTimezone(new DateTimeZone('UTC'));
আপনার যদি কেবল একটি ডেটটাইম স্ট্রিং থাকে, যেমন $givenStr = '2018-12-17 10:47:12'
, তবে প্রথমে আপনি একটি ডেটটাইম অবজেক্ট তৈরি করেন এবং তারপরে এটি রূপান্তর করুন। এইটি পিএইচপি'র $givenStr
কনফিগার করা টাইমজোনটিতে রয়েছে বলে মনে করুন।
$utcDt = (new DateTime($givenStr))->setTimezone(new DateTimeZone('UTC'));
প্রদত্ত ডেটটাইম স্ট্রিং যদি আপনার পিএইচপি কনফিগারেশনের সময়ের চেয়ে কিছু সময় অঞ্চলে থাকে তবে সঠিক সময় অঞ্চল সরবরাহ করে ডেটটাইম অবজেক্টটি তৈরি করুন ( পিএইচপি সমর্থনকারী টাইমজোনগুলির তালিকা দেখুন )। এই উদাহরণে আমরা আমস্টারডামের স্থানীয় সময় অঞ্চল অনুমান করি:
$givenDt = new DateTime($givenStr, new DateTimeZone('Europe/Amsterdam'));
$givenDt->setTimezone(new DateTimeZone('UTC'));
যেহেতু স্ট্রোটোটাইমের নির্দিষ্ট ইনপুট ফর্ম্যাট প্রয়োজন, ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট ব্যবহার করা যেতে পারে ( পিএইচপি 5.3+ প্রয়োজন )
// set timezone to user timezone
date_default_timezone_set($str_user_timezone);
// create date object using any given format
$date = DateTime::createFromFormat($str_user_dateformat, $str_user_datetime);
// convert given datetime to safe format for strtotime
$str_user_datetime = $date->format('Y-m-d H:i:s');
// convert to UTC
$str_UTC_datetime = gmdate($str_server_dateformat, strtotime($str_user_datetime));
// return timezone to server default
date_default_timezone_set($str_server_timezone);
আমি মাঝে মাঝে এই পদ্ধতিটি ব্যবহার করি:
// It is not importnat what timezone your system is set to.
// Get the UTC offset in seconds:
$offset = date("Z");
// Then subtract if from your original timestamp:
$utc_time = date("Y-m-d H:i:s", strtotime($original_time." -".$offset." Seconds"));
কাজ সব অধিকাংশ সময়।
http://php.net/manual/en/function.strtotime.php বা যদি আপনার পরিবর্তে কোনও স্ট্রিং নয় তবে সময়ের উপাদানগুলি ব্যবহার করতে হয় তবে http://us.php.net/manual/en/function.mktime। পিএইচপি
পিএইচপি 5 বা ততোধিকের সাথে আপনি ডেটটাইম :: ফর্ম্যাট ফাংশন ব্যবহার করতে পারেন (ডকুমেন্টেশন দেখুন http://us.php.net/manual/en/datetime.format.php )
echo strftime( '%e %B %Y' ,
date_create_from_format('Y-d-m G:i:s', '2012-04-05 11:55:21')->format('U')
); // 4 May 2012
যে কোনও টাইমস্ট্যাম্প থেকে অন্য সময় অঞ্চল থেকে অন্য টাইমস্ট্যাম্প ফর্ম্যাট করতে সাধারণ উদ্দেশ্য সাধারণকরণের ফাংশন। রিলেশনাল ডাটাবেসে বিভিন্ন টাইম অঞ্চল থেকে ব্যবহারকারীদের ডেটটাইমস্ট্যাম্পগুলি সঞ্চয় করার জন্য খুব দরকারী। ডাটাবেস তুলনার জন্য টাইমস্ট্যাম্পটি ইউটিসি হিসাবে সংরক্ষণ করুন এবং ব্যবহার করুনgmdate('Y-m-d H:i:s')
/**
* Convert Datetime from any given olsonzone to other.
* @return datetime in user specified format
*/
function datetimeconv($datetime, $from, $to)
{
try {
if ($from['localeFormat'] != 'Y-m-d H:i:s') {
$datetime = DateTime::createFromFormat($from['localeFormat'], $datetime)->format('Y-m-d H:i:s');
}
$datetime = new DateTime($datetime, new DateTimeZone($from['olsonZone']));
$datetime->setTimeZone(new DateTimeZone($to['olsonZone']));
return $datetime->format($to['localeFormat']);
} catch (\Exception $e) {
return null;
}
}
ব্যবহার:
$from = ['localeFormat' => "d/m/Y H:i A", 'olsonZone' => 'Asia/Calcutta'];
$to = ['localeFormat' => "Y-m-d H:i:s", 'olsonZone' => 'UTC'];
datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00"
বিকল্পভাবে আপনি এটি চেষ্টা করতে পারেন:
<?php echo (new DateTime("now", new DateTimeZone('Asia/Singapore')))->format("Y-m-d H:i:s e"); ?>
এই আউটপুট হবে:
2017-10-25 17:13:20 এশিয়া / সিঙ্গাপুর
আপনি যদি কেবলমাত্র পঠনযোগ্য তারিখ প্রদর্শন করতে চান তবে আপনি এটি কোনও পাঠ্য ইনপুট বাক্সের মান বৈশিষ্ট্যের ভিতরে ব্যবহার করতে পারেন।
আপনি যদি আপনার অঞ্চল / দেশটি দেখাতে না চান তবে 'ই' মুছে ফেলুন।
পেতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন ইউটিসি সময় এর কোনো সময় অঞ্চল ব্যবহারকারীর স্থানীয় সিস্টেমের মধ্যে সেট (এই ওয়েব অ্যাপ্লিকেশনের ইউটিসি বিভিন্ন সময়ের অঞ্চলগুলোকে সংরক্ষণ করার জন্য প্রয়োজন হবে):
জাভাস্ক্রিপ্ট (ক্লায়েন্ট-পাশ):
var dateVar = new Date();
var offset = dateVar.getTimezoneOffset();
//getTimezoneOffset - returns the timezone difference between UTC and Local Time
document.cookie = "offset="+offset;
পিএইচপি (সার্ভার-সাইড):
public function convert_utc_time($date)
{
$time_difference = isset($_COOKIE['offset'])?$_COOKIE['offset']:'';
if($time_difference != ''){
$time = strtotime($date);
$time = $time + ($time_difference*60); //minutes * 60 seconds
$date = date("Y-m-d H:i:s", $time);
} //on failure of js, default timezone is set as UTC below
return $date;
}
..
..
//in my function
$timezone = 'UTC';
$date = $this->convert_utc_time($post_date); //$post_date('Y-m-d H:i:s')
echo strtotime($date. ' '. $timezone)
ফিল প্যাফোর্ডের উত্তরের উন্নতি হিসাবে (আমি তাঁর 'Yd-mTG: i: sz' বুঝতে পারি নি এবং তিনি টাইমজোনটি ফিরিয়ে দেওয়ার পরামর্শ দিয়েছিলেন)। সুতরাং আমি এটি প্রস্তাব করছি (আমি সরল / পাঠ্যে এইচএমটিএল ফর্ম্যাটটি পরিবর্তন করে জটিল ...):
<?php
header('content-type: text/plain;');
$my_timestamp = strtotime("2010-01-19 00:00:00");
// stores timezone
$my_timezone = date_default_timezone_get();
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date)\n";
// changes timezone
date_default_timezone_set("UTC");
echo date("Y-m-d\TH:i:s\Z", $my_timestamp)."\t\t (ISO8601 UTC date)\n";
echo date("Y-m-d H:i:s", $my_timestamp)."\t\t (your UTC date)\n";
// reverts change
date_default_timezone_set($my_timezone);
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date is back)\n";
?>
gmdate
আপনাকে ইউটিসিতে ডিফল্ট টাইমজোন পরিবর্তনের পরিবর্তে ব্যবহার করা উচিত । কারণgmdate
স্বয়ংক্রিয়ভাবে ইউটিসি ব্যবহার করে।