0

我对 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

我无法弄清楚我的功能有什么问题。

4

2 回答 2

0

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');
}
于 2021-05-31T08:45:03.293 回答
0

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

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

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

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

于 2021-05-31T07:59:51.277 回答