在php中为给定时间添加时区

dev*_*234 2 php time datetime date

我需要将给定的澳大利亚时间转换为UTC.这一次可以来自澳大利亚的不同州.我在DB中有状态并将时间偏移存储在一列中.

我想知道如何添加时间偏移或以这种方式减去它.

//存储状态值及其列.

"NT" = +9.30
"QLD" = +10.00
"WA" = +8.00
Run Code Online (Sandbox Code Playgroud)

我以这种方式选择日期时间并需要减少偏移量.

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

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

我怎么能用php的日期时间完成这种工作?

编辑1,

我试着添加我的offeset,但似乎我不能提供2.30小时或2.50的双倍值

当我要求它以这种方式增加2个小时时它可以工作.

strtotime($current_time . "+2hours");
Run Code Online (Sandbox Code Playgroud)

但是,当我添加如下,它错了.

strtotime($current_time . "+2.30hours");
Run Code Online (Sandbox Code Playgroud)

编辑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>";
Run Code Online (Sandbox Code Playgroud)

但它输出,

2013-10-01 01:45:00 AM
2013-09-30 03:45:00 PM
Run Code Online (Sandbox Code Playgroud)

这怎么可能是错的?2013-09-30 03:45:00 PM根据我的理解是错误的,实际上它应该比2013-10-01 01:45:00 AM落后10小时是UTC,不是吗?

Lon*_*Dev 7

你可以像这样转换时间:

<?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";
?>
Run Code Online (Sandbox Code Playgroud)

PHP支持的时区列于此处:http: //www.php.net/manual/en/timezones.australia.php