如何将 "d-m-Y - d-m-Y" 字符串重新格式化为 "Y-m-d Y-m-d"?

How to reformat "d-m-Y - d-m-Y" string to "Y-m-d Y-m-d"?

我想更改包含两个 d-m-Y 日期字符串的字符串的格式,日期字符串由 space 连字符 space 分隔(代表一个范围)。所需的输出格式应为 Y-m-d - Y-m-d.

我可以使用 d/m/Y - d/m/Y 字符串成功地执行类似的技术,但是当我解析这些新字符串的格式时有些不对劲。

我的代码:

$date = "25-05-2020 - 30-05-2020";

$string = explode('-', $date);
$date1 = explode('-', $string[0]);
$date2 = explode('-', $string[1]);

$date1 = $date1[2] . '-' . $date1[0] . '-' . $date1[1];
$date2 = $date2[2] . '-' . $date2[0] . '-' . $date2[1];

echo $date1 . ' - ' . $date2;

我希望样本输入的输出是 2020-05-25 - 2020-05-30

只需在 - 前后添加一个 space,如下所示:

<?php

$date = "25-05-2020 - 30-05-2020";
$splitted_dates = explode(" - ",$date);
$date1 = $splitted_dates[0];
$date2 = $splitted_dates[1];

echo $date1, " " , $date2;

演示: https://3v4l.org/QTIHd

另一个解决方案:

<?php
$date = "25-05-2020 - 30-05-2020";

preg_match_all('/\d{1,2}-\d{1,2}-\d{4}/', $date, $matches);

list ($date1, $date2) = $matches[0];

echo $date1." ".$date2;

Demo

我发现最直接的技术是单个 preg_replace() 调用,它交换字符串中每个日期的日值和年值。这样做,不需要生成任何临时数组来将输入字符串转换为输出字符串。

  • 捕获:天数(</code>)</li> <li>捕获:连字符、月份数字、连字符 (<code>)
  • 捕获:年号()
  • 匹配:space,连字符,space
  • 捕获:天数(</code>)</li> <li>捕获:连字符、月份数字、连字符 (<code>)
  • 捕获:年号()

代码:(Demo)

var_export(
    preg_replace(
        '~(\d{2})(-\d{2}-)(\d{4}) - (\d{2})(-\d{2}-)(\d{4})~',
        ' - ',
        '25-05-2020 - 30-05-2020'
    )
);

输出:

'2020-05-25 - 2020-05-30'