date_create и новый DateTime распознают чч: мм и чч: мм: сс даже без спецификаций формата. Дата установлена на текущую дату.
$line = '09:00-18:00';
$parts = explode('-', $line);
$start = date_create($parts[0]);
$end = date_create($parts[1]);
var_dump($start, $end);
Вывод:
object(DateTime)#1 (3) {
["date"]=>
string(26) "2019-11-07 09:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2019-11-07 18:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
Очень короткий вариант, который возвращает массив с 2 объектами даты и времени:
$line = '09:00-18:00';
$array = array_map('date_create',explode('-', $line));
Обновление:
Строгая проверка формата может быть реализована с помощью регулярных выражений.
if(preg_match('/^([01][0-9]|2[0-3]):[0-5][0-9]-([01][0-9]|2[0-3]):[0-5][0-9]$/',$line)){
//processing
}
else {
//format error
}