Я работаю над извлечением даты с filenames
. Для этого я использовал регулярное выражение.Php Datetime Неизвестный формат - Только дата
Даты могут быть как 2015-10-31
, 20151031
, , 31102015
.
Вот код, я использую для извлечения даты:
$re = '/(\d{8})|([0-9]{4}-[0-9]{2}-[0-9]{2})|([0-9]{2}-[0-9]{2}-[0-9]{4})/';
$str = "20151001-importsrc1.txt";
$str = "2015-10-01-importsrc1.txt";
$str = "01-10-2015-importsrc1.txt";
$str = "importsrc1-2015-10-01.txt";
$str = "importsrc1-01102015.txt";
$str = "importsrc1-01-10-2015.txt";
preg_match($re, $str, $matches);
$date = str_replace("-", "", $matches[0]);
Использование str_replace
Я раздевая дефис, поэтому я в конечном итоге с одним из двух форматов, 20151031
, 31102015
.
Использование strtotime()
преобразуется в 1970
. Использование РНР DateTime
я получил следующее сообщение об ошибке:
Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (01102015) at position 7 (5): Unexpected character'
Мне нужно, чтобы избежать createfromformat
от того, что я понимаю, но у меня есть только дата и не DATETIME это erroring.
Может ли кто-нибудь указать мне в правильном направлении, как я могу отформатировать эти даты для использования позже в коде.
Ничего я понимаю, некоторые из них, случается, есть дефис, а некоторые нет. – Ashley
У вас всегда был этот формат даты –
'strtotime()' даст вам дату 1970 года, когда она не понимает формат даты. Он не понимает '01012015', поэтому, когда вы удаляете дефисы, он не будет распаковываться' 01-01-2015'. Он действительно понимает '20150101', однако – RiggsFolly