我正在解析相当多格式为周一-周四或周二-周六的数据。如何在不使用大量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
对象添加一天。
通过将字符串分解为"-&";,然后将日期转换为数字?