5

指定されたオーストラリアの時間を UTC に変換する必要があります。今回は、AUS のさまざまな州からのものである可能性があります。DBに州があり、時間オフセットを列に保存しました。

この方法で時間オフセットを追加または減算する方法を知りたいです。

// 状態とその列の値を格納します。

"NT" = +9.30
"QLD" = +10.00
"WA" = +8.00

私はこの方法で選択した日時を取得しており、オフセットを減らす必要があります。

$timeAinUTC = date("H:i A", strtotime("07am")) - (offset); 

i.e $timeAinUTC = date("H:i A", strtotime("07am")) - (+9.30);

この種の作業をphpのdatetimeで行うにはどうすればよいですか?

編集1、

オフセットを追加するためにこれを試しましたが、2.30 時間や 2.50 時間のような二重の値を提供できないようです

このように2時間を追加するように依頼すると機能します。

strtotime($current_time . "+2hours");

しかし、以下のように追加すると、間違っています。

strtotime($current_time . "+2.30hours");

編集2

AUS で利用可能なすべての州。ACT、NSW、NT、QLD、SA、TAS、VIC、WA

http://wwp.greenwichmeantime.com/time-zone/australia/time-zones/

編集3

答えの人が説明したように、私はこれを以下のように試しました。

$date = new DateTime('2013-10-01 01:45', new DateTimeZone('Australia/Melbourne'));
echo $date->format('Y-m-d h:i:s A') . "<br>";

$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d h:i:s A') . "<br>";

しかし、それは出力します、

2013-10-01 01:45:00 AM
2013-09-30 03:45:00 PM

これはどうして間違っているのでしょうか? 2013-09-30 03:45:00 PM は私の理解では間違っており、実際には 2013-10-01 01:45:00 AM から 10 時間遅れているはずです。

4

2 に答える 2

14

次のように時間を変換できます。

<?php
$date = new DateTime('2013-10-01', new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Australia/Melbourne'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

PHP でサポートされているタイムゾーンは次のとおりです: http://www.php.net/manual/en/timezones.australia.php

于 2013-10-01T05:10:16.790 に答える