मुझे UTC को किसी भी समय लायब्रेरी का उपयोग किए बिना UTC को एक दिनांक समय स्टैम्प परिवर्तित करने के लिए एक आसान तरीका की आवश्यकता है (जो भी टाइमज़ोन है)।
जवाबों:
GetTimezone और setTimezone का प्रयास करें , उदाहरण देखें
(लेकिन यह एक वर्ग का उपयोग करता है)
अपडेट करें:
किसी भी वर्ग के बिना आप कुछ इस तरह की कोशिश कर सकते हैं:
$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')
UTC में "अब" प्राप्त करने के लिए।
संदर्भ देखें:
यदि आपके पास इस प्रारूप में एक तारीख है YYYY-MM-HH dd: mm: ss, तो आप वास्तव में अपने "डेटाटाइम स्ट्रिंग" के अंत में एक UTC जोड़कर php को धोखा दे सकते हैं और इसे बदलने के लिए strtotime का उपयोग कर सकते हैं।
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
स्थानीय समय क्षेत्र स्ट्रिंग को UTC स्ट्रिंग में बदलें।
उदा न्यूजीलैंड टाइम ज़ोन
$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);
यदि आप PHP के दिनांक समय वर्ग का उपयोग करने में कोई आपत्ति नहीं करते हैं , जो PHP 5.2.0 के बाद से उपलब्ध है, तो ऐसे कई परिदृश्य हैं जो आपकी स्थिति के लिए उपयुक्त हो सकते हैं:
यदि आपके पास एक $givenDt
DateTime ऑब्जेक्ट है जिसे आप UTC में बदलना चाहते हैं तो यह इसे UTC में बदल देगा:
$givenDt->setTimezone(new DateTimeZone('UTC'));
यदि आपको $givenDt
बाद में मूल की आवश्यकता है , तो आप वैकल्पिक रूप से क्लोन किए गए ऑब्जेक्ट के रूपांतरण से पहले दिए गए DateTime ऑब्जेक्ट को क्लोन करना चाहते हैं:
$utcDt = clone $givenDt;
$utcDt->setTimezone(new DateTimeZone('UTC'));
यदि आपके पास केवल एक डेटाइम स्ट्रिंग है, उदाहरण के लिए $givenStr = '2018-12-17 10:47:12'
, तो आप पहले एक डेटाइम ऑब्जेक्ट बनाते हैं, और फिर इसे कनवर्ट करते हैं। ध्यान दें कि $givenStr
यह PHP के कॉन्फ़िगर किए गए टाइमज़ोन में है।
$utcDt = (new DateTime($givenStr))->setTimezone(new DateTimeZone('UTC'));
यदि दिए गए डेटाइम स्ट्रिंग आपके PHP कॉन्फ़िगरेशन में एक से अलग कुछ समयक्षेत्र में है, तो सही टाइमज़ोन की आपूर्ति करके डेटाटाइम ऑब्जेक्ट बनाएं ( टाइमज़ोन PHP समर्थन की सूची देखें )। इस उदाहरण में हम एम्स्टर्डम में स्थानीय समयक्षेत्र मान रहे हैं:
$givenDt = new DateTime($givenStr, new DateTimeZone('Europe/Amsterdam'));
$givenDt->setTimezone(new DateTimeZone('UTC'));
जैसा कि strtotime को विशिष्ट इनपुट प्रारूप की आवश्यकता होती है, DateTime :: createFromFormat का उपयोग किया जा सकता है ( php 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। php
PHP 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
किसी भी टाइमज़ोन से दूसरे टाइमस्टैम्प को प्रारूपित करने के लिए सामान्य प्रयोजन सामान्यीकरण फ़ंक्शन। किसी रिलेशनल डेटाबेस में अलग-अलग टाइमज़ोन से उपयोगकर्ताओं के डेटासेटिमैम्प को संग्रहीत करने के लिए बहुत उपयोगी है। डेटाबेस तुलना के लिए टाइमस्टैम्प को UTC के रूप में संग्रहीत करें और साथ उपयोग करें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 एशिया / सिंगापुर
आप पाठ इनपुट बॉक्स के मान विशेषता के अंदर इसका उपयोग कर सकते हैं यदि आप केवल पढ़ने के लिए केवल दिनांक प्रदर्शित करना चाहते हैं।
यदि आप अपना क्षेत्र / देश दिखाना नहीं चाहते हैं, तो 'ई' निकालें।
प्राप्त करने के लिए इन चरणों का पालन UTC समय के किसी भी समय क्षेत्र उपयोगकर्ता की स्थानीय प्रणाली में सेट (यह वेब अनुप्रयोगों यूटीसी के लिए विभिन्न समय क्षेत्रों को बचाने के लिए के लिए आवश्यक हो जाएगा):
जावास्क्रिप्ट (क्लाइंट-साइड):
var dateVar = new Date();
var offset = dateVar.getTimezoneOffset();
//getTimezoneOffset - returns the timezone difference between UTC and Local Time
document.cookie = "offset="+offset;
Php (सर्वर-साइड):
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)
Phill Pafford के उत्तर में सुधार के रूप में (मुझे उनकी 'Yd-mTG: i: sz' समझ में नहीं आई और उन्होंने टाइमज़ोन को वापस करने का सुझाव दिया)। इसलिए मैं इसे प्रस्तावित करता हूं (मैं सादे / पाठ में HMTL प्रारूप को बदलकर जटिल करता हूं ...):
<?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
डिफ़ॉल्ट समयक्षेत्र को UTC में बदलने के बजाय बस उपयोग करना चाहिए । क्योंकिgmdate
स्वचालित रूप से यूटीसी का उपयोग करता है।