PHPでUTC時間を取得する


122

PHPのdate()関数を使用してUTC / GMT +/-タイムスタンプを取得するにはどうすればよいですか?たとえば、私がしようとすると

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

Unixタイムスタンプを取得します。しかし、ローカルタイミングに基づいて、文字列GMT / UTC +/- 0400またはGMT / UTC +/- 1000でUTC / GMTタイムスタンプを取得する必要があります。


1
@JeffPuckettII GMTは夏時間に変更されません。イギリスは夏にGMTからBSTに変わりますが、GMTは同じままで常にUTCに一致します。
ルイス2017

回答:


111

を使用gmdateすると、常にGMT日付が返されます。構文はと同じですdate


12
@sanmai:Unixタイムスタンプは定義により常にUTCです。en.wikipedia.org/wiki/Unix_time
nikc.org 2015

1
@ nikc.org:問題は、gmdate( "U")が、サーバーシステムのタイムゾーンが異なる場合、UTCタイムスタンプではないtime()と同じ結果を返すことです。サーバーシステムのタイムゾーンがUTCと異なる場合、実際のUTCベースのタイムスタンプを取得できる唯一の方法は、strtotime(gmdate( "M d YH:i:s"))でした。これは、gmdate( "U")とは異なります
bksi

@bksi記述された動作を繰り返すことはできません。(私のマシンはGMTでなく、UNIXのタイムスタンプは正しいです。また、gmdate("U") == time()バグのある動作のように思えます。)PHPプロジェクトのバグを再確認して報告します。
nikc.org 2016

簡単なphpスクリプトを使用してシナリオをテストしました。<?echo time()。 "===" .strtotime(gmdate( "M d YH:i:s")) ""タイムゾーン: ".date(" Z ")。" \ n "; >>実行すると、次の結果が表示されます:1456342082 === 1456338482タイムゾーン:3600シェルコマンドの日付の結果は次のとおりです:水2月24 20:28:11 CET 2016
bksi

1
@bksi-おそらく、datetimeの内部表現とdatetimeの外部表現を混同しているのではないでしょうか。ゾーン指定子なしの時間vsゾーン指定子付きの時間?nikc(およびドキュメント)が言うように、time()「Unixエポック(1970年1月1日00:00:00 GMT)からの秒数」を返します。注GMT。デフォルトで、システムこれを表示用のタイムゾーンに変換するという事実は、ユーザーにとって便利です。内部的には、常にGMTです。
ToolmakerSteve


47

以前にここで答え PHP 5.2.0以降は、使用することができますDateTimeクラスのインスタンスをUTCタイムゾーンを指定しますDateTimeZone

DateTime __construct()ドキュメントでは、DateTimeインスタンスを作成し、タイムゾーンを指定して現在の時刻を取得するときに、最初のパラメータとして「now」を渡すことを推奨しています。

$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

@PaulSkinnerに感謝します、私は答えを修正しました。
Jessedc

おかげで、以前のバックスラッシュの目的は何DateTimeですか?自分で実行すると、それらがなくても問題なく動作するようです。

1
@Snowこのコードが名前空間付きのコードに挿入された場合、ファイルnamespace Aの上部に宣言があるとしましょう。PHP はDateTimeを参照すると仮定しますがA\DateTime、これは誤りです。バックスラッシュを追加すると、問題が修正されます。私の意見では、まだ名前空間を使用していない場合でも、取るのは良い習慣です。
Niavlys

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

3
@AlainTiembloは完全ではありません。あなたはそれを動作させるためにオフセットを減算する必要がある
sanmai


14

UTC日付の取得

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

UTCタイムスタンプの取得

time();

あなたがdate_default_timezone_setあなたのコードに持っていても結果は変わらないでしょう。


@زياد訂正してくれてありがとう、私は自分の答えを変更しました
StefansArya

gmdate()はUTCではなくGMTを返すと思いました。「返される時刻がグリニッジ標準時(GMT)であることを除いて、date()関数と同じです。」何か不足していますか?これらは同等になりますか?
ジョーダン

3
@ジョーダン実際には、UTCとGMTは同じ時間を表します。stackoverflow.com/questions/48942916/...
マルッティ・

12

呼び出す以外gmdateに、このコードを残りのコードの前に置くこともできます。

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

これにより、残りの日付/時刻関連の呼び出しがGMT / UTCタイムゾーンを使用するようになります。


PHPの最新バージョンではもうありません。
Khom Nazid

1
@KhomNazidパラメータとしての「UTC」は引き続き有効です。php.net/manual/en/...
Harikrishna

6

引数なしでgmmktime関数を使用して、現在のUTCタイムスタンプを取得できます。

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

gmmktimeは、サーバー時間がUTCを使用している場合にのみ機能します。たとえば、私のサーバーはUS / Pacificに設定されています。上記の関数は太平洋時間をエコーバックします。


gmmktime()は推奨されません
ジョニー

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

以下を使用してUTC時間を取得できます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.