পিএইচপি-তে ইউটিসির সময় পান


122

পিএইচপি-র তারিখ () ফাংশন ব্যবহার করে আমি কীভাবে ইউটিসি / জিএমটি +/- টাইম স্ট্যাম্প পেতে পারি? উদাহরণস্বরূপ, যদি আমি চেষ্টা করি

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

আমি ইউনিক্স টাইম স্ট্যাম্প পাব; তবে স্থানীয় সময় অনুসারে আমার জিটিটি / ইউটিসি +/- 0400 বা জিএমটি / ইউটিসি +/- 1000 স্ট্রিং সহ ইউটিসি / জিএমটি টাইম স্ট্যাম্প পেতে হবে।


1
@ জেফপুকেটআইআইএম GMT দিবালোকের সঞ্চয়ের জন্য পরিবর্তন করে না। গ্রীষ্মে যুক্তরাজ্য GMT থেকে BST এ পরিবর্তিত হয়, তবে GMT একই থাকে এবং সর্বদা ইউটিসির সাথে মেলে।
লুইস

উত্তর:


111

ব্যবহার gmdateসর্বদা একটি GMT তারিখ ফিরে আসবে। সিনট্যাক্স হিসাবে হিসাবে একই date


12
@ সানসাই: একটি ইউনিক্স টাইমস্ট্যাম্প সর্বদা ইউটিসি সংজ্ঞায়িত হয়। en.wikipedia.org/wiki/Unix_time
nikc.org

1
@ নিক্স.আর.োগ্রাফি: সমস্যাটি হ'ল জিএমডিট ("ইউ"), সময় () হিসাবে একই রকম ফেরত দেয় যা আপনার সার্ভার সিস্টেমের টাইমজোনটি আলাদা হলে ইউটিসি টাইমস্ট্যাম্প নয়। সত্যিকারের ইউটিসি ভিত্তিক টাইমস্ট্যাম্পটি অর্জন করতে পেরে আমি একমাত্র উপায়টি ছিল স্ট্রোটটাইম (জিএমডিট ("এম ডি ওয়াইএইচ: আই: এস")), যখন আপনার সার্ভার সিস্টেমের টাইমজোনটি ইউটিসি থেকে আলাদা
bksi

@bksi আমি আপনার বর্ণিত আচরণের পুনরাবৃত্তি করতে অক্ষম। (আমার মেশিনটি জিএমটিতে নেই এবং আমার ইউনিক্স টাইমস্ট্যাম্পগুলি সঠিক Also এছাড়াও gmdate("U") == time())) সম্ভাব্য বগী আচরণের মতো মনে হচ্ছে। ডাবল চেক করুন এবং পিএইচপি প্রকল্পের সাথে একটি বাগ ফাইল করুন।
nicc.org

আমি দৃশ্যের পরীক্ষার জন্য সহজ পিএইচপি স্ক্রিপ্ট ব্যবহার করেছি: <? প্রতিধ্বনির সময় ()। "==="। স্ট্রোটাইম (জিএমডিট ("এম ডি ওয়াইএইচ: আই: এস"))। "টাইমজোন:" .ডেট ("জেড")। "\ n"; ?> আমি যখন এটি চালিয়েছি আমি এই ফলাফলটি পেয়েছি: 1456342082 === 1456338482 টাইমজোন: 3600 শেল কমান্ডের ফলাফল: বুধ 24 ফেব্রুয়ারী 20:28:11 সিইটি 2016
bksi

1
@bksi - সম্ভবত আপনি ডেটটাইমের অভ্যন্তরীণ প্রতিনিধিত্বকে ডেটটাইমের বাহ্যিক উপস্থাপনের সাথে বিভ্রান্ত করছেন? জোন স্পেসিফায়ারের সাথে টাইম ডাব্লু / ওএ জোন স্পেসিফায়ার? নিক যেমন (এবং ডকুমেন্টেশন) বলেছে, time()"ইউনিক্স ইপচ (জানুয়ারি 1 1970 00:00:00 জিএমটি) থেকে" সেকেন্ডের সংখ্যা ফিরে আসে "। নোট GMT। ডিফল্টরূপে আপনার সিস্টেম এটি প্রদর্শনের জন্য আপনার সময় অঞ্চলকে রূপান্তরিত করে , এটি ব্যবহারকারীর সুবিধার্থে। অভ্যন্তরীণভাবে, এটি সর্বদা জিএমটি।
টুলমেকারস্টেভ


47

পূর্বে এখানে উত্তর হিসাবে , পিএইচপি 5.2.0 যেহেতু আপনি DateTimeক্লাসটি ব্যবহার করতে পারেন এবং ইউটিসি টাইমজোনকে উদাহরণ সহ উল্লেখ করতে পারেন DateTimeZone

তারিখসময় __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? এটিকে নিজে চালাচ্ছি, এগুলি ছাড়া এগুলি ঠিক ঠিক কাজ করবে বলে মনে হচ্ছে।
তুষারপাত

1
@ অনুগ্রহ করে যদি এই কোডটি নেমস্পিড কোডটিতে সন্নিবেশ করা হয় তবে আসুন আমরা বলি যে আপনার ফাইলটির namespace Aশীর্ষে একটি ঘোষণা রয়েছে, পিএইচপি DateTimeউল্লেখ করবে A\DateTimeযা ভুল। ব্যাকস্ল্যাশ যুক্ত করা সমস্যার সমাধান করে। আমার মতে আপনি যদি এখনও নামের জায়গা ব্যবহার না করেন তবে এটি নেওয়া ভাল অভ্যাস।
নিয়াভ্লিজ

35
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);

3
পছন্দ করুন এটিকে কাজ করতে আপনাকে অফসেটটি বিয়োগ করতে হবে
sanmai


14

ইউটিসি তারিখ প্রাপ্তি

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

ইউটিসি টাইমস্ট্যাম্প প্রাপ্ত

time();

আপনার কোডটিতে থাকা ফলাফল এমনকি আলাদা হবে না date_default_timezone_set


@ زياد সংশোধনের জন্য ধন্যবাদ, আমি আমার উত্তরটি পরিবর্তন করেছি
স্টিফানসআআআআআআআআ 2626

আমি ভেবেছিলাম যে জিএমডিট () ইউটিসি নয়, জিএমটি ফেরায়। "ফিরিয়ে দেওয়া সময়টি গ্রীনউইচ মিন টাইম (GMT) ব্যতীত তারিখ () ফাংশনটির জন্য একই"। আমি কিছু অনুপস্থিত করছি? এগুলি কি সমতুল্য বের হয়?
জর্ডান

3
@ জর্দান বাস্তবে ইউটিসি এবং জিএমটি একই সময় উপস্থাপন করে। stackoverflow.com/questions/48942916/...
martti

12

কল gmdateকরা ছাড়াও আপনি এই কোডটি আপনার বাকী কোডের আগে রেখে দিতে পারেন:

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

এটি GMT / UTC টাইমজোনটি ব্যবহার করতে আপনার বাকি তারিখ / সময় সম্পর্কিত কলগুলি করে।


পিএইচপি এর সর্বশেষ সংস্করণে আর নেই।
খোম নাজিদ

1
প্যারামিটার হিসাবে @ খোমনাজিদ "ইউটিসি" এখনও বৈধ। php.net/manual/en/…
হরিকৃষ্ণ

6

আপনি বর্তমান ইউটিসি টাইমস্ট্যাম্পটি পাওয়ার জন্য আর্গুমেন্ট ছাড়াই জিএমএমটাইম ফাংশন ব্যবহার করতে পারেন :

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

জিএমএমকিটাইম কেবল তখনই কাজ করবে যদি আপনার সার্ভারের সময়টি ইউটিসি ব্যবহার করে। উদাহরণস্বরূপ, আমার সার্ভারটি মার্কিন / প্রশান্ত মহাসাগরে সেট করা আছে। প্যাসিফিক সময় পিছনে ইকোস উপরে তালিকাভুক্ত ফাংশন।


জিএমএমকিটাইম () অবমূল্যায়ন করা হয়েছে
জনি

2

স্থানীয় সময় অনুসারে GMT / UTC +/- 0400 বা GMT / UTC +/- 1000 স্ট্রিং সহ

আপনার কাস্টম ফর্ম্যাটটিO আপনাকে স্থানীয় সময় থেকে টাইমজোন অফসেট দেওয়ার জন্য অনুপস্থিত ।

ঘন্টার মধ্যে গ্রিনউইচ সময়ের (GMT) পার্থক্য উদাহরণ: +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

নীচে বর্তমান ইউটিসি (সমন্বিত ইউনিভার্সাল সময়) সময় পেতে পিএইচপি কোডটি সন্ধান করুন

<?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");
?>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.