【问题标题】:php add or subtract timezone offsetphp添加或减去时区偏移量
【发布时间】:2012-03-06 08:45:45
【问题描述】:

我有一些日期存储在 mysql 数据库中的 gmt 中。
假设客户时区偏移量为 -540;我将如何更正来自数据库的datetime 以反映这一点?是否有一个方便的函数可以让我输入日期,或者我需要相应地添加或减去。

【问题讨论】:

  • 使用timestamp mysql 数据类型,mysql 会为你做到这一点
  • 它是怎么做到的?它肯定不知道客户的时区。我想它会根据服务器时区来做吗?我全神贯注 - 谢谢。
  • 您可以为每个连接设置客户端时区,mysql 将为您完成所有偏移工作。在 SO 上有数百万次关于它的讨论

标签: php timezone-offset


【解决方案1】:

由于您拥有 GMT 格式的数据项,您必须使用 strtotime 将它们转换为时间戳,更多信息请参见:http://php.net/manual/en/function.strtotime.php 获得时间戳后,您可以从中减去偏移量(540 乘以 60 秒),然后使用 date 将结果转换为新的日期字符串,更多信息请参见:http://php.net/manual/en/function.date.php

这是一个版本的代码可以做到这一点:

$dbValue = $row['date']; 
$timestamp = strtotime($dbValue) - (540*60);
$result = date("Y-m-d H:i:s", $timestamp);

【讨论】:

  • 谢谢 - 我将字段更改为数据库中的时间戳类型的利弊是什么。在这一点上,如果它能更好地为我服务,这是一个选择。
  • 我认为我们在这方面走在了正确的轨道上。但是上面的代码需要 9 分钟而不是 9 小时。
  • 在我的脑海中,我不得不说一个缺点是要在整个项目中显示它们,你必须将时间戳转换为日期字符串,但我不能想想任何其他的缺点。优点,您可以很容易地按日期对行进行排序,因为时间戳基本上是数字。你可以让相对计算更容易,就像你最初的问题一样。希望这会有所帮助。
  • 如果你说它需要 9 分钟,而不是 9 小时,你可以再次使用 strtotime 获得偏移量,如下所示: $offset = strtotime("-9 hours");并从原始时间戳中减去该值。让我们知道它是否有效
  • 谢谢罗米。最终这样做了 - 540 * 60;我会将此标记为正确的。
【解决方案2】:

也许这个片段会帮助你:

$format = 'Y-m-d';
$obj = new DateTime();
$date = date($format, strtotime($obj->format('Y-m-d H:i:s')) - $obj->format('Z'));

另请参阅http://www.php.net/manual/en/class.datetime.php 了解更多信息。

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 2018-02-20
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多