我需要将给定的澳大利亚时间转换为UTC。 我在数据库中有状态并将时间偏移量存储在一列中。
我想知道如何以这种方式添加或减去时间偏移量。
存储的状态值及其列。
"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的日期时间完成这种工作?
编辑 1,
我尝试这样做来添加我的 offeset,但似乎我无法提供双精度值,例如 2.30 小时或 2.50
当我要求它以这种方式增加 2 小时时,它会起作用。
strtotime($current_time . "+2hours");
但是当我像下面这样添加时,它是错误的。
strtotime($current_time . "+2.30hours");
编辑 2
澳大利亚提供的所有国家。澳大利亚首都领地, 新南威尔士州, 北领地, 昆士兰州, 南澳大利亚州, 塔斯马尼亚州, 维多利亚州, 华盛顿州
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 小时到 UTC,不是吗?
您可以像这样转换时间:
<?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
我希望,以下在运行时更改时区的解决方案对您有所帮助。
$date = new 'DateTime(date('Y-m-d H:i:s'));
$date->setTimezone(new 'DateTimeZone('Asia/Kolkata'));
echo $date->format('Y-m-d H:i:sP') . "<br>";
$date = new 'DateTime(date('Y-m-d H:i:s'));
$date->setTimezone(new 'DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "<br>";
$date = new 'DateTime(date('Y-m-d H:i:s'));
$date->setTimezone(new 'DateTimeZone('America/Argentina/Salta'));
echo $date->format('Y-m-d H:i:sP') . "<br>";
检查时的输出:
2020-03-18 20:54:08+05:30
2020-03-18 15:24:08+00:00
2020-03-18 12:24:08-03:00
您也可以设置自己的日期,而不是"date('Y-m-d H:i:s'("。
谢谢你问这个问题。