PHPのdate()関数を使用してUTC / GMT +/-タイムスタンプを取得するにはどうすればよいですか?たとえば、私がしようとすると
date("Y-m-d H:i:s", time());
Unixタイムスタンプを取得します。しかし、ローカルタイミングに基づいて、文字列GMT / UTC +/- 0400またはGMT / UTC +/- 1000でUTC / GMTタイムスタンプを取得する必要があります。
PHPのdate()関数を使用してUTC / GMT +/-タイムスタンプを取得するにはどうすればよいですか?たとえば、私がしようとすると
date("Y-m-d H:i:s", time());
Unixタイムスタンプを取得します。しかし、ローカルタイミングに基づいて、文字列GMT / UTC +/- 0400またはGMT / UTC +/- 1000でUTC / GMTタイムスタンプを取得する必要があります。
回答:
を使用gmdate
すると、常にGMT日付が返されます。構文はと同じですdate
。
gmdate("U") == time()
バグのある動作のように思えます。)PHPプロジェクトのバグを再確認して報告します。
time()
「Unixエポック(1970年1月1日00:00:00 GMT)からの秒数」を返します。注GMT
。デフォルトで、システムがこれを表示用のタイムゾーンに変換するという事実は、ユーザーにとって便利です。内部的には、常にGMTです。
単純なgmdate()で十分です
<?php
print gmdate("Y-m-d\TH:i:s\Z");
以前にここで答え 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
DateTime
ですか?自分で実行すると、それらがなくても問題なく動作するようです。
namespace A
の上部に宣言があるとしましょう。PHP はDateTime
を参照すると仮定しますがA\DateTime
、これは誤りです。バックスラッシュを追加すると、問題が修正されます。私の意見では、まだ名前空間を使用していない場合でも、取るのは良い習慣です。
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);
UTC日付の取得
gmdate("Y-m-d H:i:s");
UTCタイムスタンプの取得
time();
あなたがdate_default_timezone_set
あなたのコードに持っていても結果は変わらないでしょう。
呼び出す以外gmdate
に、このコードを残りのコードの前に置くこともできます。
<?php
date_default_timezone_set("UTC");
?>
これにより、残りの日付/時刻関連の呼び出しがGMT / UTCタイムゾーンを使用するようになります。
ローカルタイミングに基づいて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
以下を使用して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');
/**
* 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)
);
}