Вы хотите DateTime::createFromFormat
вместо.Это должно работать:
$date1 = DateTime::createFromFormat('!Y F j', '2018 October 22'); // OK
$date2 = DateTime::createFromFormat('!Y F j', '2018-October-22'); // Fail
!
означает установку непарсированных полей на соответствующую часть 1970/1/1 00:00;j
- это день месяца без начальных нулей, F
- полный месяц (поэтому Feb
недопустим), а Y
- год в виде четырехзначного числа.