【问题标题】:Changing date format in mysql_fetch returned array更改mysql fetch返回数组中的日期格式
【发布时间】:2013-07-24 08:06:41
【问题描述】:

我有这样的查询

select fname,joined_date from employees where id=1

目前我用来显示此返回的员工详细信息的日期格式是 Y-m-d。 但是现在我需要将mysql默认格式Y-m-d转换为d/m/Y(在所有日期信息显示字段中)。

对我来说,非常非常困难要遍历所有文件来进行日期格式转换。

所以我想在我的数据库类中做一些这样的事情。我的数据库类中有这样的功能

function fetch($res){
   $row = mysql_fetch_assoc($res);
   foreach($row as $key=>$value){
   if(preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',$value))
      $row[$key] = date('d/m/Y',strtotime($value));
   }
   return $row;
}//end function

我正在像这样使用这个功能

$row = $db->fetch($res);

while($row = $db->fetch($res)){...}

我得到了预期的输出,但有一条错误消息

foreach 的参数无效

看起来 fetch 函数代码执行了 (total_num_rows + 1) 次

如果我使用 for 循环而不是 foreach,则会出现未定义的偏移错误

目前我正在使用类似的东西来逃避

if(is_array($row)){...}

当我查找 $res 类型时, 这显示了 资源(第一次迭代),资源(第二次)

对于 $row 数组

数组(第一次迭代),布尔值(第二次)

谁能告诉我为什么会这样? 或者有更好的方法吗?

提前致谢。

【问题讨论】:

标签: php


【解决方案1】:

当您到达结果末尾时,mysql_fetch_assoc() 返回false。您需要检查这种情况:

function fetch($res){
   $row = mysql_fetch_assoc($res);
   if ($row) {
     foreach($row as $key=>$value){
       if(preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',$value)){
          $row[$key] = date('d/m/Y',strtotime($value));
       }
     }
   }
   return $row;
}

【讨论】:

  • 是的,我正在检查 is_array($row).. 并没有出现错误。但我只是想知道它为什么再次循环?
  • 当您执行while ($row = $db->fetch()) 时,它必须调用 fetch 一个额外的时间来检测它已经到达终点。
  • 但只是 $db->fetch() (没有while)也会为我返回相同的错误
  • 如果我只使用 $db->fetch(),它会执行两次,第二次迭代会出现错误
  • 我无法解释。
【解决方案2】:

如果您想要这种格式,例如:2015 年 6 月 19 日 用这个: date("F d, Y",strtotime($myrow['date'])); 其中 $myrow['date'] 是您从 mysql 行中获取的内容 查看此链接以获得更多帮助:http://erikastokes.com/mysql-help/display-mysql-dates-in-other-formats.php

【讨论】:

  • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
【解决方案3】:

让您在 MySQL 命令中将日期转换为所需的格式会更容易。 示例:

SELECT *, DATE_FORMAT(date, "%m-%d-%y") AS date FROM my_table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2013-12-13
    • 2023-01-02
    • 2013-12-01
    相关资源
    最近更新 更多