【问题标题】:Addition of time difference of time zone (to GMT value) [duplicate]添加时区的时差(到 GMT 值)[重复]
【发布时间】:2013-08-13 08:03:56
【问题描述】:

数据库将值存储为YYYY-MM-DD HH:MM:SS(例如 2013-04-14%2015:00:00) 这是格林威治标准时间但真正的值是上述日期和时间 + 时间服务器的区域差异。

$time_heard = '2013-04-14%2015:00:00';
$time_diff = date('p')

$real_time = $time_heard + $time_diff  ;

echo $real_time ; 

我怎样才能做到这一点。 谢谢

【问题讨论】:

    标签: php time timezone gmt


    【解决方案1】:

    如果您使用的是 MySQL,您可以直接在 SELECT 中使用 CONVERT_TZ 功能。 http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz

    如果您需要在 PHP 中执行此操作,请使用 DateTime class by creating a new DateTime with the timezone set to GMT 然后 changing the timezone 当您使用 output the date 时,它应该显示为新时区。

    【讨论】:

    • 我使用的是 PostgreSQL,但我不知道时区(因为它们可能会有所不同,取决于安装完成的位置)。另一个问题是 $time_heard 变量也可能是用户输入。
    • 那么你将不得不使用 PHP。但是当您创建 DateTime 对象时,$time_heard 可以用作用户输入,只要确保使用可接受的格式即可。要获取本地服务器时区,只需使用date_default_timezone_get()
    【解决方案2】:

    您可以使用date_default_timezone_set() 功能将时间设置为您想要的区域

    在这里您可以找到不同的区域:http://www.php.net/manual/en/timezones.php

    或者如果你坚持,你可以使用 date_parse_from_format()

    这是它的手册:http://php.net/manual/en/function.date-parse-from-format.php

    编辑:使用简单功能的另一种方法:

    $tmstamp = strtotime($date1) + strtotime($date2);
    echo date("YYYY-MM-DD HH:MM:SS", $tmstamp) ;
    

    【讨论】:

    • 让我试试日期解析,但我如何将它重新组合在一起,就像添加之前一样(不是作为数组,而是作为一个字符串)
    • 我添加了另一种简单的方法,请阅读
    • '2013-04-14 15:00:00'
    • 请记住,在第二种方法中,$date1$date2 不能在字符串中包含时区,否则 strtotime() 会将其转换为 GMT。
    • 我明白,我用的是数字,即'1 hr'
    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2018-12-25
    • 2010-09-18
    • 1970-01-01
    • 2019-08-31
    • 2020-12-13
    相关资源
    最近更新 更多