76


23

PHPはdatetimeをUTCに変換します

ライブラリを使用せずに、日付のタイムスタンプをUTCに(サーバーのどのタイムゾーンからでも)簡単に変換する簡単な方法が必要です。

16 Answer


98


strtotimeを使用して、指定された文字列(ローカル時間として解釈)からタイムスタンプを生成し、http://php.net/manual/en/functionを使用します。 .gmdate.php [gmdate]でフォーマットされたUTC日付として取得します。

要求に応じて、以下に簡単な例を示します。

echo gmdate('d.m.Y H:i', strtotime('2012-06-28 23:55'));


55


DateTimeの使用:

$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


28


getTimezone and setTimezoneを試してください。例を参照してください

(ただし、これはクラスを使用します)

更新:

クラスがなければ、次のようなものを試すことができます。

$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "
");
echo(date("Y-d-mTG:i:sz",$the_date) . "
");
echo(date_default_timezone_set("UTC") . "
");
echo(date("Y-d-mTG:i:sz", $the_date) . "
");

NOTE You might need to set the timezone back to the original as well


19


この方法で:

gmdate('Y-m-d H:i:s', $timestamp)

あるいは単に

gmdate('Y-m-d H:i:s')

UTCで「NOW」を取得します。

参照を確認してください:


13


YYYY-MM-HH dd:mm:ssの形式の日付がある場合、「datetime文字列」の最後にUTCを追加し、strtotimeを使用して変換することにより、実際にphpをだますことができます。

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

ご覧のとおり、夏時間の問題も処理します。

それを解決する少し奇妙な方法…​. :)


4


私はいつかこの方法を使用します:

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

当時の[ラインスルー] すべて * MOST *で動作します。


4


strtotimeは特定の入力形式を必要とするため、http://php.net/manual/en/datetime.createfromformat.php [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);


3


ローカルタイムゾーン文字列をUTC文字列に変換します。 + e.g. ニュージーランドのタイムゾーン

$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);
  • NZDT:UTC + 13:00
    $ datetime = "2016-02-01 00:00:01"、$ output = "2016-01-31 11:00:01"; + $ datetime = "2016-02-29 23:59:59"の場合、$ output = "2016-02-29 10:59:59";

  • NZST:UTC + 12:00
    $ datetime = "2016-05-01 00:00:01"、$ output = "2016-04-30 12:00:01"; + $ datetime = "2016-05-31 23:59:59"の場合、$ output = "2016-05-31 11:59:59";


1


PHP 5以上では、* datetime

format *関数を使用できます(ドキュメント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