2015-03-30 1 views
0

Как бы использовать DateTime :: createFromFormat, чтобы захватить как начальное и конечное время для даты, как это:DateTime :: createFromFormat Как фиксировать конкретную дату-время?

Sunday, March 29, 2015<br />10:00 AM - 12:00 PM 

мне нужно переформатировать для типа DATETIME данных в MySQL. Вот моя попытка:

$start_time = DateTime::createFromFormat('D, M d, Y*/*h:i A+', $element->plaintext); 
$end_time = DateTime::createFromFormat('D, M d, Y?????????????????h:i A+', $element->plaintext); 
$start_time->format('Y-m-d H:i:s'); 
$end_time->format('Y-m-d H:i:s'); 

Я получаю ошибку «Фатальная ошибка: Вызов в формате функции член() на логическое значение ...» Это должно означать, что $element->plaintext не то, что я думаю, что это.

+0

Для вашего удобства здесь есть 'DateTime :: Использование createFromFormat' в: http://php.net/manual/en/datetime.createfromformat.php –

+0

Вы должны были бы первый разборе это в 3 строки. Дата, время начала и время окончания. Затем дважды вызовите 'createFromFormat', убедившись, что каждый раз указывать дату. –

+0

@RocketHazmat, действительно? Тогда в чем смысл шаблонов? Или я злоупотребляю ими? –

ответ

0

Символы подстановки и разделителя для DateTime немного странны. Во-первых, * не будет соответствовать символу пробела, и вы также не сможете использовать * для соответствия номерам.

Итак, вам нужно сделать, это:

$start_time = DateTime::createFromFormat('D, M d, Y* *h:i A+', $element->plaintext); 
$end_time = DateTime::createFromFormat('D, M d, Y* *h:i A| - h:i A', $element->plaintext); 

| характер во 2 примере перезагружается дата строки, чтобы он мог разобрать во второй раз.

DEMO: https://eval.in/306698

+0

Хмм ... Я пытаюсь поместить в массив '$ start_time-> format ('Ymd H: i: s')' в массив, и я получаю «Неустранимая ошибка: вызов в формат функции-члена() на boolean ... " –

+0

Является ли' $ element-> plaintext' не строкой? –

+0

@EinionReishus: Что делает 'var_dump ($ element-> plaintext);' show? –