【问题标题】:Function to Convert Date转换日期的函数
【发布时间】:2021-05-31 07:52:52
【问题描述】:

我是 php 新手,对以下函数有疑问:

protected function convertDate($date)
  {
    $toExplode = $date;
    $pos = strpos($date, 'T');

    if ($pos !== false) {
      $toExplode = substr_replace($toExplode, ' ', $pos, 1);
    }

    if (strpos($toExplode, '.') !== false) {
      $exploded = explode('.', $toExplode);
      return $exploded[0];
    }

    if (strpos($toExplode, '+') !== false) {
      $exploded = explode('+', $toExplode);
      return $exploded[0];
    }
  }

我的输入有以下格式:

  • 2019-05-26T22:01:00.000Z
  • 2019-03-11 10:58:33.979+00

但我希望我的输出具有这种格式:

  • 2019-03-11 10:58:33

不幸的是,当我应用该函数时,它在此日期返回 null:2019-04-23T16:26:59Z

我不知道我的函数出了什么问题。

【问题讨论】:

  • “消毒”一词有点含糊。您要接受还是拒绝替代格式?前者应该是直截了当的,因为new \DateTime()strtotime() 都会很乐意接受任何松散地类似于约会的东西;后者可能更棘手。
  • 这能回答你的问题吗? Convert one date format into another in PHP
  • 你不想清理任何东西,你只想转换格式。
  • 我已经更新了标题

标签: php date


【解决方案1】:

您可以使用 PHP 的核心函数来执行此操作,而无需分解/内爆/替换

strotime 将任何已知的日期/时间格式转换为 UNIX 时间戳。 Documentation

date 允许您将 UNIX 时间戳重新转换为任何可读格式。 Documentation

protected function convertDate($date) {
    $time = strtotime($date);
    return date("Y-m-d H:i:s", $time);
}

可以在下面找到带有 2 个示例日期的完整示例代码:

$date1 = '2019-05-26T22:01:00.000Z';
$date2 = '2019-03-11 10:58:33.979+00';
function convertDate($date) {
    $time = strtotime($date);
    return date("Y-m-d H:i:s", $time);
}

echo convertDate($date1)."\n";
echo convertDate($date2)."\n";

这将打印出来

2019-05-26 22:01:00

2019-03-11 10:58:33

【讨论】:

  • 没问题,很高兴能帮上忙。如果这解决了您的问题,请记住将其标记为已接受的解决方案,以帮助将来遇到类似问题的用户。祝你有美好的一天
  • 我的答案与@AndreaOlivato 相同,唯一的区别是我使用了一个类,而他使用的是函数。我认为两者都很好。
【解决方案2】:

Php 提供 DateTime 类来为你工作。例如输入 2019-05-26T22:01:00.000Z 你可以这样做:

php > $data = new DateTime('2019-05-26T22:01:00.000Z');
php > echo $data->format('Y-m-d H:i:s');
2019-05-26 22:01:00

再次,...输入2019-03-11 10:58:33.979+00 你可以这样做:

php > $data = new DateTime('2019-03-11 10:58:33.979+00');
php > echo $data->format('Y-m-d H:i:s');
2019-03-11 10:58:33

无论输入格式是什么。 DateTime 识别它并为您处理或管理它。

你的函数可以这样转换:

protected function convertDate($date)
{
    $data = new DateTime($date);
    return $data->format('Y-m-d H:i:s');
}

编写相同代码的可读性较差的方法是:

protected function convertDate($date)
{
    return (new DateTime($date))->format('Y-m-d H:i:s');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多