我该如何将像星期一到星期六这样的字符串格式化为包含的日期数组



我正在解析相当多格式为周一-周四或周二-周六的数据。如何在不使用大量regex的情况下将其格式化为包含的天数数组?可能类似于上午11点至晚上8点的

您不需要任何正则表达式即可做到这一点。您需要内置的日期和时间类:

$str = 'Saturday-Thursday';
list($begin, $end) = array_map(fn($d) => new DateTime($d), explode('-', $str));
$end = $end->modify($end < $begin ? '+8 days':'+1 day');
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval, $end);
$result = array_map(fn($d) => $d->format('l'), [...$daterange]);
print_r($result);

演示

同样的事情持续数小时:

$str = '11am-8pm';
list($begin, $end) = explode('-', $str);
$begin = new DateTime($begin);
$end = new DateTime($end);
$end = $end->modify('+1 hour');
$interval = new DateInterval('PT1H');
$daterange = new DatePeriod($begin, $interval, $end);
$result = array_map(fn($d) => $d->format('ga'), iterator_to_array($daterange));
print_r($result);

演示

您只需要知道PHP手册中的不同日期/时间格式。

请注意,如果要从晚上11点到凌晨1点,则需要向$end对象添加一天。

通过将字符串分解为&quot-&";,然后将日期转换为数字?

最新更新