代码之家  ›  专栏  ›  技术社区  ›  ConroyP

PHP和MySQL之间的时区差异

  •  1
  • ConroyP  · 技术社区  · 15 年前

    当我有一个时间戳,我想把它转换回 datetime


    简单复制

    $original_date = '2009-08-31 23:59:59';
    $timestamp = strtotime($original_date);
    echo $timestamp;                                    // Gives 1251763199
    
    echo date('Y-m-d H:i:s', $timestamp);               // PHP:   2009-08-31 23:59:59
    echo db_field('SELECT FROM_UNIXTIME(1251763199)');  // MySQL: 2009-09-01 00:59:59
    

    PHP给出的时间戳似乎是 correct one 对于给定的日期,假设时区是GMT。如果我们运行BST,MySQL的结果应该是正确的(当时给定的时间戳在GMT+1范围内)。

    $timestamp 从今天开始( 1267640942 ),PHP和MySQL似乎都很高兴地告诉我这是事实 2010-03-03 18:29:02


    服务器上设置了什么时区?

    我查过了 the MySQL docs ,表示如果我的时区设置为 system 操作系统将提供时区信息。目前的情况似乎是这样的:

    mysql> SELECT @@global.time_zone, @@session.time_zone;
    +--------------------+---------------------+
    | @@global.time_zone | @@session.time_zone |
    +--------------------+---------------------+
    | SYSTEM             | SYSTEM              | 
    +--------------------+---------------------+
    

    date 命令(在每个服务器上的cl上运行)。

    foo@bar:/home/foo$ date
    Wed Mar 3 18:45:02 GMT 2010
    


    有人知道我在这里看过的是不是有一个非常基本的设置,或者知道是什么导致了这种差异吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Phill Pafford    15 年前

    我建议使用 UTC 在您的服务器和MySQL上安装时区并将其转换为您想要的时区。MySQL和PHP中的转换相当简单。

        2
  •  2
  •   Alexar    15 年前

    我使用这种方法:

    处理好PHP,别管mysql

    建议通过设置php的默认时区 date_default_timezone_set

    $sDate = date("Y-m-d H:i:s");
    mysql_query("insert into `table` set `created_on` = '$sDate' ");
    

    当您选择:

    mysql_query("select `created_on` from `table` ");
    $iTime = strtotime($aRow['created_on']);
    

    gmdate

    $iTime_Global = gmdate("U", $iTime);
    

    如果只处理PHP代码,mysql时区在应用程序中不会有任何影响(这是由时区集生成的)