PHP में UTC समय प्राप्त करें


122

PHP की तारीख () फ़ंक्शन का उपयोग करके मैं UTC / GMT +/- टाइम स्टैम्प कैसे प्राप्त कर सकता हूं? उदाहरण के लिए, अगर मैं कोशिश करूँ

date("Y-m-d H:i:s", time()); 

मुझे यूनिक्स टाइम स्टैम्प मिलेगा; लेकिन मुझे स्थानीय समय के आधार पर स्ट्रिंग जीएमटी / यूटीसी +/- ०४०० या जीएमटी / यूटीसी +/- १००० के साथ यूटीसी / जीएमटी समय टिकट प्राप्त करने की आवश्यकता है।


1
@JeffPuckettII GMT दिन की बचत के लिए नहीं बदलता है। यूके गर्मियों में GMT से BST में बदल जाता है, लेकिन GMT वही रहता है और हमेशा UTC से मेल खाता है।
lewis

जवाबों:


111

उपयोग करने gmdateसे हमेशा GMT की तारीख वापस आ जाएगी। सिंटेक्स के लिए समान है date


12
@sanmai: यूनिक्स टाइमस्टैम्प हमेशा UTC परिभाषा द्वारा होता है। en.wikipedia.org/wiki/Unix_time
nikc.org

1
@ nikc.org: समस्या यह है कि gmdate ("U"), समय के समान ही रिटर्न करता है () जो आपके सर्वर सिस्टम टाइमज़ोन के अलग होने पर UTC टाइमस्टैम्प नहीं है। एकमात्र तरीका जो मैं वास्तविक UTC आधारित टाइमस्टैम्प प्राप्त करने में सक्षम था, स्ट्रेटोटाइम था (gmdate ("M d YH: i: s")), जो कि उस gmdate ("U") से भिन्न होता है, जब आपका सर्वर टाइमटेबल UTC से भिन्न होता है
bksi

@bksi मैं आपके वर्णित व्यवहार को दोहराने में असमर्थ हूं। (मेरी मशीन GMT पर नहीं है और मेरे UNIX टाइमस्टैम्प सही हैं। इसके अलावा gmdate("U") == time()।) संभावित छोटी गाड़ी के व्यवहार जैसा लगता है। PHP प्रोजेक्ट के साथ एक बग को डबल चेक और फाइल करें।
nikc.org

मैंने परिदृश्य का परीक्षण करने के लिए सरल php स्क्रिप्ट का उपयोग किया: <? प्रतिध्वनि समय ()। "==="। कसौटी (gmdate ("M d YH: i: s"))। "Timezone:" .date ("Z") "\ n"; ?> जब मैंने इसे चलाया तो मुझे यह परिणाम मिला: 1456342082 === 1456338482 Timezone: 3600 शेल कमांड तिथि का परिणाम है: बुध 24 फरवरी 20:28:11 सीईटी 2016
bksi

1
@bksi - शायद आप डेटाइम के बाहरी प्रतिनिधित्व के साथ डेटाटाइम के आंतरिक प्रतिनिधित्व को भ्रमित कर रहे हैं? समय w / o ज़ोन स्पेसियर बनाम ज़ोन स्पेसियर के साथ समय? जैसा कि nikc (और प्रलेखन) कहता है, time()"यूनिक्स एपोच के बाद से सेकंड की संख्या (1 जनवरी 1970 00:00:00 GMT)"। ध्यान दें GMT। यह तथ्य कि डिफ़ॉल्ट रूप से आपका सिस्टम प्रदर्शन के लिए इसे आपके टाइमज़ोन में परिवर्तित करता है , एक उपयोगकर्ता सुविधा है। आंतरिक रूप से, इसका हमेशा जी.एम.टी.
टूलमेकरसेव


47

जैसा कि पहले बताया जा चुका है , PHP 5.2.0 के बाद से आप DateTimeक्लास का उपयोग कर सकते हैं और इसके उदाहरण के साथ UTC टाइमज़ोन निर्दिष्ट कर सकते हैं DateTimeZone

DateTime __construct () दस्तावेज़ीकरण " टाइमस्ट " को पहले पैरामीटर के रूप में उत्तीर्ण करने का सुझाव देता है, जब डेटटाइम उदाहरण बनाते हैं और वर्तमान समय को प्राप्त करने के लिए टाइमज़ोन निर्दिष्ट करते हैं।

$date_utc = new \DateTime("now", new \DateTimeZone("UTC"));

echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC

3
DateTime __construct () प्रलेखन अब वर्तमान समय प्राप्त करने के लिए पहले पैरामीटर को छोड़ने का सुझाव नहीं देता है। अब यह कहता है कि आपको 'अभी' की एक स्ट्रिंग का उपयोग करना चाहिए।
पॉलस्किनर

धन्यवाद @PaulSkinner, मैंने उत्तर में संशोधन किया है।
जेसडेक

धन्यवाद, बैकस्लैश के उद्देश्य क्या हैं DateTime? इसे स्वयं चलाना, उनके बिना ठीक काम करना प्रतीत होता है।
हिम

1
@ यदि यह कोड नामांकित कोड में डाला गया है, तो namespace Aमान DateTimeलें कि आपकी फ़ाइल में सबसे ऊपर एक घोषणा है, PHP संदर्भित करने के लिए मान लेगा A\DateTime, जो गलत है। बैकस्लैश जोड़ना समस्या को हल करता है। यहां तक ​​कि अगर आप अभी तक नाम स्थान का उपयोग नहीं करते हैं, तो मेरी राय में यह एक अच्छी आदत है।
Niavlys



14

UTC दिनांक प्राप्त करना

gmdate("Y-m-d H:i:s");

UTC टाइमस्टैम्प प्राप्त करना

time();

परिणाम date_default_timezone_setआपके कोड पर भी अलग नहीं होगा ।


@ زياد सुधार के लिए धन्यवाद, मैंने अपने जवाब को संशोधित किया है
स्टीफंस आर्य

मैंने सोचा था कि gmdate () GMT लौटाता है और UTC नहीं। "तिथि के अनुसार () फ़ंक्शन को छोड़कर, जो समय लौटा है वह ग्रीनविच मीन टाइम (जीएमटी) है"। क्या मैं कुछ भूल रहा हूँ? क्या ये बराबर आते हैं?
जॉर्डन

3
@ जोर्डन व्यवहार में UTC और GMT एक ही समय का प्रतिनिधित्व करते हैं। stackoverflow.com/questions/48942916/…
मार्टी

12

कॉल करने के अलावा gmdateआप इस कोड को अपने बाकी कोड से पहले भी डाल सकते हैं:

<?php
date_default_timezone_set("UTC");
?>

कि जीएमटी / यूटीसी टाइमज़ोन का उपयोग करने के लिए आपकी बाकी की तारीख / समय संबंधित कॉल करेंगे।


अब PHP के नवीनतम संस्करणों में नहीं।
खोम नाज़िद

1
एक पैरामीटर के रूप में @KhomNazid "UTC" अभी भी मान्य है। php.net/manual/en/…
हरिकृष्णा

6

आप वर्तमान UTC टाइमस्टैम्प को प्राप्त करने के लिए तर्कों के बिना gmmktime फ़ंक्शन का उपयोग कर सकते हैं :

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 

gmktime केवल तभी काम करेगा जब आपका सर्वर समय UTC का उपयोग कर रहा हो। उदाहरण के लिए, मेरा सर्वर US / Pacific में सेट है। इकोस के ऊपर सूचीबद्ध समारोह प्रशांत समय।


gmmktime () पदावनत है
जॉनी

2

स्ट्रिंग GMT / UTC +/- 0400 या GMT / UTC +/- 1000 के साथ स्थानीय समय के आधार पर

आपका कस्टम प्रारूपO आपको स्थानीय समय से समय-समय पर ऑफ़सेट देने के लिए गायब है।

ग्रीनविच टाइम (जीएमटी) का अंतर घंटों में उदाहरण: +0200

date_default_timezone_set('America/La_Paz');
echo date('Y-m-d H:i:s O');

2018-01-12 12:10:11 -0400

हालाँकि, अधिकतम पोर्टेबिलिटी / इंटरऑपरेबिलिटी के लिए, मैं ISO8601 तिथि प्रारूप का उपयोग करने की सलाह दूंगाc

date_default_timezone_set('America/La_Paz');
echo date('c');

2018-01-12T12: 10: 11-04: 00

date_default_timezone_set('Australia/Brisbane');
echo date('c');

2018-01-13T02: 10: 11 + 10: 00

आप भी उपयोग कर सकते हैं gmdateऔर टाइमज़ोन ऑफसेट स्ट्रिंग हमेशा रहेगा+00:00

date_default_timezone_set('America/La_Paz');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00


1

आप यूटीसी समय प्राप्त करने के लिए निम्नलिखित का उपयोग कर सकते हैं:

date_default_timezone_set('Asia/Calcutta');

$current_date = date("Y/m/d g:i A");

$ist_date = DateTime::createFromFormat(
                        '"Y/m/d g:i A"',
                        $current_date,
                        new DateTimeZone('Asia/Calcutta')
                    );

$utc_date = clone $ist_date;
$utc_date->setTimeZone(new DateTimeZone('UTC'));

echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A');

0
/**
     * Converts a local Unix timestamp to GMT
     *
     * @param   int Unix timestamp
     * @return  int
     */
    function local_to_gmt($time = '')
    {
        if ($time === '')
        {
            $time = time();
        }

        return mktime(
            gmdate('G', $time),
            gmdate('i', $time),
            gmdate('s', $time),
            gmdate('n', $time),
            gmdate('j', $time),
            gmdate('Y', $time)
        );
    }

0

नीचे वर्तमान UTC (समन्वित यूनिवर्सल टाइम) समय प्राप्त करने के लिए PHP कोड खोजें

<?php
// Prints the day
echo gmdate("l") . "<br>";

// Prints the day, date, month, year, time, AM or PM
echo gmdate("l jS \of F Y h:i:s A");
?>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.