【问题标题】:How to get correct timezone value using php如何使用 php 获取正确的时区值
【发布时间】:2014-02-27 15:37:04
【问题描述】:

我正在使用以下代码将服务器时间更改为另一个时区

 $datetime = new DateTime(2014-02-27 03:03:00);

$la_time = new DateTimeZone('America/New_York');
$datetime->setTimezone($la_time);
$dateformat="Y-m-d h:i A";
return $datetime->format($dateformat);

除了上午/下午,它工作正常......

正确的结果是:02-26-14 10:03 AM,但我得到的结果是 02-26-14 10:03 PM。

你能告诉我问题出在哪里

【问题讨论】:

  • PHP 默认时区是什么? date_default_timezone_get()

标签: php timezone


【解决方案1】:

结果将始终基于原始时区设置。如果要转换为不同的时区,则必须在设置时区之后初始化DateTime对象。

这是一个让工作更轻松的函数:

function convertTimezone($date,$from_tz,$to_tz,$format='Y-m-d h:i A') {
    $date = new DateTime($date, new DateTimeZone($from_tz));
    $date->setTimezone(new DateTimeZone($to_tz));
    return $date->format($format);
}

功能可以通过checking if the supplied timezones are valid改进。

示例用法:

echo convertTimezone('2014-02-27 03:03:00','Pacific/Nauru','Pacific/Chatham');

输出:

2014-02-27 04:48 AM

Demo

【讨论】:

  • 对不起,我的时间仍然错误。正确答案是 2014-02-27 10:03 AM,但我得到的是 2014-02-27 03:03 AM。
【解决方案2】:

在初始化 DateTime 时设置时区:

$datetime = new DateTime("2014-02-27 03:03:00", new DateTimeZone('America/New_York'));
$dateformat="Y-m-d h:i A";
return $datetime->format($dateformat);

当您设置 DateTime 时,它​​使用当时有效的时区。如果你稍后更改时区,它会更改时间的表示,但时间将基于原始时区设置。

编辑:我没有仔细阅读这个问题;你应该在初始化DateTime对象as in the manual时设置时区。

【讨论】:

  • 如果我在 settimezone() 之后放置日期,我会遇到致命错误,例如“致命错误:在非对象上调用成员函数 setTimezone()”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2015-09-13
  • 2013-12-26
  • 1970-01-01
  • 2019-07-23
相关资源
最近更新 更多