【问题标题】:Implode array of dates and change date format内爆日期数组并更改日期格式
【发布时间】:2021-08-25 11:25:45
【问题描述】:

我有以下代码,我想从数据库中检索日期。代码输出disered列表,但日期格式不同。

$array = $stmt->fetchAll(PDO::FETCH_COLUMN);
$dates = implode("\n",$array);
return $dates;

结果是:

2021-05-26
2021-05-27
2021-05-28
2021-05-29
2021-05-30

我需要这种格式:m/d/Y

我试过了:

`$array = $stmt->fetchAll(PDO::FETCH_COLUMN);

$dates = implode("\n",$array); $newDate = date("m/d/y", strtotime($dates)); 返回 $newDate;`

但结果只是一个结果,而且是错误的:

01/01/70

格式已更改,但我丢失了正确的日期

提前致谢。

【问题讨论】:

  • 您对这部分的哪一部分有问题?使用date formatting 函数映射数组。
  • 我上传了更多信息,抱歉我第一次在 stackoverflow 上提问。我正在学习,我不是专家。我的问题是将 strtotime 功能与内爆结合起来。非常感谢

标签: php mysql arrays


【解决方案1】:

在您的 SELECT 中使用 mysql 函数 DATE_FORMAT,您不需要重新格式化它。

SELECT DATE_FORMAT('2021-05-26','%m/%d/%Y')
| DATE_FORMAT('2021-05-26','%m/%d/%Y') | | :------------------------------------------------ | | 2021 年 5 月 26 日 |

db小提琴here

在您的查询中,您可以像宣传的那样使用它,并用列替换日期

SELECT  DATE_FORMAT(`date`,'%m/%d/%Y') FROM reservations WHERE object_id IN (select id from rooms WHERE sub_id='$value')

您的代码对于sql 注入易受攻击,因此请使用准备好的带参数的语句参见How can I prevent SQL injection in PHP?

【讨论】:

  • 非常感谢您的回答。我的查询正是这样:“SELECT date FROM reservations WHERE object_id IN (select id from rooms WHERE sub_id='$value')”我怎样才能使用你说的那个功能?
  • 我添加了查询,但是您的代码对于 sql 注入来说是易受攻击的,因此请使用 带参数的准备好的语句参见@ 987654323@
  • 非常感谢您的帮助。这很完美。我可以在实际项目中使用固定值,所以我不会有 sql 注入。无论如何,非常感谢你的链接,我也需要研究这个......
【解决方案2】:

最简单的方法是将它们转换为 DateTime 对象,然后使用格式来获​​取您想要的结果。所以像:

$date = "2021-05-26";

$DT = DateTime::createFromFormat("Y-m-d", $date);
echo $DT -> format("m/d/Y");

此方法还使您能够进行其他转换和/或修改时间等。

DateTime create from format docs

DateTime format docs

【讨论】:

    【解决方案3】:

    您可以使用 array_map 对数组的所有元素应用回调。使用 strtotime 和 date 函数,您可以更改日期的格式。 Documentation on php.net

    $array = $stmt->fetchAll(PDO::FETCH_COLUMN);
    $dates = array_map(function($element) {
        return date("Ymd", $element);
    }, $dates);
    $dates = implode("\n",$array);
    return $dates;
    

    【讨论】:

    • 非常感谢。我尝试了不同的格式,但结果始终相同:2021-05-26...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2016-11-22
    相关资源
    最近更新 更多