【问题标题】:PHP & MySQL are returning different dates for same timestampPHP & MySQL 为相同的时间戳返回不同的日期
【发布时间】:2012-11-26 22:21:24
【问题描述】:

我遇到了一个有点令人沮丧的问题,我觉得有一个简单的解决方案。当我将相同的 UNIX 时间戳传递给 PHP date 和 MySQL FROM_UNIXTIME 方法时,它们返回两个非常不同的日期。我想从 MySQL 返回一个与 PHP 返回的值匹配的值。

这是我当前使用的代码及其输出。提供的时间戳表示日期Tue, 01 Jan 2013 (01/01/2013)。也供参考,这里是格式值。

MySQL 格式

  • %j = 一年中的某一天 (001..366)。
  • %m = 月份,数字 (00..12)。
  • %y = 年份,数字(两位数)。

PHP 格式

  • z = 一年中的某一天,从 0(0 到 365)开始。
  • m = 月份的数字表示,带有前导零(01 到 12)。
  • y = 年份的两位数表示(例如:99 或 03)。

MySQL 查询

SELECT FROM_UNIXTIME(1357018200, '%j-%m-%y');
-> 366-12-12

PHP 代码

echo date('z-m-y', 1357018200);
-> 0-01-13

任何帮助将不胜感激,感谢您的宝贵时间。 :)

其他信息

  • MySQL 版本:5.5.23
  • MySQL system_time_zone:CDT
  • MySQL 时区:系统
  • PHP date_default_timezone_get:美国/芝加哥 (CDT)

【问题讨论】:

  • 我认为这可能是时区问题。检查 MySQL (show variables like '%time_zone';) 和 PHP 使用的时区 (date_default_timezone_get)。
  • 是的 - 除了发布这些变量之外,您还可以发布您正在使用的 MySQL 版本。
  • 我已经用时区信息和 SQL 版本更新了帖子。 :)

标签: php mysql date time format


【解决方案1】:

您的 PHP 和 MySQL 在时间上不一致。使用时间转换器:

http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=1357018200&timezone=-6

给出结果“2012 年 12 月 31 日星期一 23:30:00 (GMT -6)”,因此您的 PHP 给出了错误的结果。虽然您已经给出了 PHP 运行的时区,但您可以通过运行来仔细检查:

date_default_timezone_set ("America/Chicago");
echo date('z-m-y', 1357018200)."\r\n";

应该给出“365-12-12”。

我想这可能是某些地方错误地设置了时区,或者“美国/芝加哥 (CDT)”可能是您的 php.ini 文件中旧版本 PHP 中的旧设置。

查看来自 http://php.net/manual/en/timezones.america.php 的允许时区值列表,没有列出“美国/芝加哥 (CDT)”,因此您应该弄清楚它在哪里设置为该虚假值,因为它可能会导致其他问题。

【讨论】:

  • MySQL 返回“2012-12-09”和“00:45:19”。 PHP 返回 'Sun, 09 Dec 12 00:45:19 -0600'。
  • 强制它设置时区确实使它返回了预期值,这很奇怪,因为我的脚本都没有与时区混淆。非常感谢您的帮助!
【解决方案2】:

解决时区问题后,您的实际问题的答案是:

function    sqlStyleDate($timestamp){

    $dayOfYear = date("z", $timestamp) + 1;
    $year = date("y", $timestamp);
    $month = date("n", $timestamp);

    $result = "$dayOfYear-$year-$month";

    return $result;
}

echo sqlStyleDate(1357018200)."\r\n";

这会将 PHP 一年中的 0-365 天转换为与 MySQL 一年中的 1-366 天相同。

【讨论】:

  • 您可能应该将其编辑到您现有的答案中,因为它深入到问题的核心并且是正确的。
猜你喜欢
  • 2019-11-08
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2017-09-12
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多