首页 文章

由于时区设置而更改日期

提问于
浏览
1

我在mysql中存储的日期在查看数据库时看起来很好,但是当我查看日期时,它总是落后于一天 .

mysql数据类型是“date” . 我使用UNIX_TIMESTAMP从mysql获取日期列 . 我使用php的date()函数显示日期 . 我正在使用bluehost并配置php.ini来使用洛杉矶时区 .

示例:我在2013-05-08创建了一篇新文章和密钥 . 它将作为日期类型存储在显示2013-05-18的mysql中 . 但是当我稍后再观看它时会显示2013-05-07 .

时间戳是1367992800,格林尼治标准时间格林威治标准时间2013年5月8日星期三06:00:00,但在我的时区2013年5月7日星期二11:00:00 PM .

如何显示2013-05-18的原定日期?我不想将我的时区改为另一个,因为洛杉矶是我正确的时区,对于我需要记录时间戳的所有其他方法,这是准确的 .

2 回答

  • 0

    如果您希望日期与时区无关,则应将其存储在不转换值的列中 . 所以您选择的 date 列类型非常合适 .

    当您尝试在UNIX TIMESTAMP中获取该日期时,问题就出现了 . UNIX TIMESTAMP是自格林威治标准时间1970年1月1日以来的秒数 . 这意味着mysql使用它的时区设置将您的日期转换为GMT中的时间戳 .

    PHP日期函数还取决于php时区设置,并将时间戳转换为当前时区的日期 .

    要从MySQL获取日期而不将其转换为当前时区,请不要使用UNIX_TIEMSTAMP函数获取它 . 按原样或使用DATE_FORMAT函数获取它 .

  • 1

    您应该使用DateTime对象 .

    $timezone = new DateTimeZone('Europe/London');
    
    $date = new DateTime();
    $date->setTimestamp($timestamp);
    $date->setTimezone($timezone);
    
    echo $date->format('Y-m-d H:i:s');
    

相关问题