Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP&;MySQL正在为同一时间戳返回不同的日期_Php_Mysql_Date_Time_Format - Fatal编程技术网

PHP&;MySQL正在为同一时间戳返回不同的日期

PHP&;MySQL正在为同一时间戳返回不同的日期,php,mysql,date,time,format,Php,Mysql,Date,Time,Format,我遇到了一个稍微令人沮丧的问题,我觉得有一个简单的解决办法。当我从_UNIXTIME方法向PHPdate和MySQL传递相同的UNIX时间戳时,它们返回的是两个非常不同的日期。我想从MySQL返回一个与PHP返回的值匹配的值 下面是我当前使用的代码及其输出。提供的时间戳表示日期周二,2013年1月1日(2013年1月1日)。以下是格式值,仅供参考 MySQL格式 %j=一年中的某一天(001..366) %m=月份,数字(00..12) %y=年份,数字(两位数) PHP格式 z=从0(0

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

下面是我当前使用的代码及其输出。提供的时间戳表示日期
周二,2013年1月1日(2013年1月1日)
。以下是格式值,仅供参考

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系统\u时区:CDT
  • MySQL时区:系统
  • PHP日期\默认\时区\获取:美国/芝加哥(CDT)

    • 您的PHP和MySQL在时间上不一致。在以下位置使用时间转换器:

      给出结果“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”

      我猜可能是其他地方的时区设置不正确,或者“America/Chicago(CDT)”是php.ini文件中以前版本的php中的旧设置


      查看允许的时区值列表时,没有列出“America/Chicago(CDT)”,因此您应该找出将其设置为该伪值的位置,因为它可能会导致其他问题。

      一旦您解决了时区问题,实际问题的答案是:

      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";
      

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

      我认为这可能是一个时区问题。检查MySQL(
      显示变量,如“%time_zone”;
      )和PHP使用了什么时区()。是的,除了发布这些变量,您还可以发布您正在使用的MySQL版本。我已经用时区信息和SQL版本更新了帖子。:)MySQL返回'2012-12-09'和'00:45:19'。PHP返回'Sun,09 Dec 12 00:45:19-0600'。强制它设置时区确实会使它返回预期值,这很奇怪,因为我的脚本都没有弄乱时区。非常感谢你的帮助!您可能应该将其编辑到您现有的答案中,因为它直指问题的核心,在其他方面是正确的。