PHP切换时区/检索MySQL数据



我在我的站点上显示一个系统状态表,其中有过去14天(包括天)中的每一行。然后,对于每一列,我从MySQL数据库中选择当天发生的任何事件。

MySQL中的所有数据都是用UTC存储的,PHP也在UTC下运行。我有两个问题:

  1. 例如,如果用户在东部时间,网格正在更新以显示明天的日期,即使东部用户只有晚上8点。我想我已经解决了这个问题,通过这样做:

    while ($i < 14)
        {       
            //SET STATUS DATE
            $status_date = date("Y-m-d H:i:s", strtotime("-$i day"));
            //LOCALIZE TIMES    
            $status_date = new DateTime($status_date);
            $status_date->setTimeZone(new DateTimeZone('America/New_York'));
            echo $status_date->format("F j, Y");
        }
    
  2. 我的下一个问题是对事件的搜索。每个事件在数据库中都有一个INCIDENT_START字段,我像这样查询:

    SELECT INCIDENT_STATUS FROM TABLE_system_status WHERE SYSTEM_AFFECTED='WEBSITE' AND INCIDENT_START BETWEEN '$start_time' AND '$end_time' ORDER BY INCIDENT_START DESC LIMIT 1
    

这是我的问题。如果我使用$start_time = $status_date->format("Y-m-d 00:00:00")$end_time = $status_date->format("Y-m-d 23:59:59"),则事件不会在表中正确的日期显示。

的例子:数据库中的事件的INCIDENT_START时间为2013-03-19 01:02:01 UTC,等于2013-03-18 21:02:01 EDT。但是,在本例中,它仍然显示在表的3月19日列上。

底线……我需要能够获得事件从00:00:00到23:59:59在用户的本地时间,即使他们在数据库中的UTC。我有一种感觉,我把这个弄得太复杂了,但我试过很多不同的组合,似乎都做不好。非常感谢任何帮助!

需要将$status_date设置为用户所在时区,并转换为UTC。

$status_date = new DateTime("today -$i day", new DateTimeZone('America/New_York'));
$status_date->setTimeZone(new DateTimeZone('UTC'));
$start_time = $status_date->format("Y-m-d H:i:s");
$status_date->add(new DateInterval('PT23H59M59S'));
$end_time = $status_date->format("Y-m-d H:i:s");

MySQL可以为你做:

SELECT CONVERT_TZ(INCIDENT_STATUS, 'UTC', 'EST') ...

相关文档:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz

相关内容

  • 没有找到相关文章

最新更新