2012-05-20 2 views
1

Другой простой вопрос. Я нашел это действительно интересный фрагмент кода:Функции даты в PHP

$date_str = "Jan 14th 2011"; 
$date = date_parse_from_format('M jS Y', $date_str); 
echo $date->format('Y-m-d'); 

Но когда я запускаю его на своем компьютере, он говорит Фатальная ошибка: Вызов в формате функции член() на не объект линии 3.

код был взят отсюда Converting date string to date, поэтому я предполагаю, что это хорошо, но похоже, что это ссылка на объект, который не существует.

Я искал http://php.net/manual/en/function.date-parse-from-format.php и http://www.w3schools.com/php/php_ref_date.asp среди многих других, но я не нашел никаких подсказок.

Мой вопрос заключается в том, должен ли этот код работать как отдельный фрагмент кода. Если да, то почему это не работает для меня? Иначе я должен сделать, чтобы он работал так, как ожидалось.

+1

Какую версию PHP вы используете? Эта функция предназначена для PHP> = 5.3.0, тогда как большинство общедоступных хостинговых компаний по-прежнему предоставляют PHP 4 по умолчанию. Проверьте 'phpinfo()'. – jedwards

+0

@jedwards еще раз спасибо. В этом случае я использую PHP версии 5.3.9. – Brett

ответ

3
date_parse_from_format(); 

возвращает ассоциативный массив, и вы пытаетесь получить доступ к методу класса на не объект.

, если вы хотите использовать встроенный класс DateTime PHP. затем более подробную информацию здесь http://in2.php.net/manual/en/datetime.format.php

+0

, который работает. Просто быстрый вопрос - есть ли простой способ проверить, что он преобразуется в дату, не создавая исключения, если это не сработает? – Brett

+1

исключения должны быть выброшены, если что-то не удастся, если вы хотите, чтобы часть исключения была пропущена, а затем привяжите ее, используя инструкцию try catch. например, 'try {/ *** ваш код datetime здесь *** /} catch (Exception $ e) {/ *** делать что-либо с пойманным исключением, оставляя его пустым, не покажет вам exeption *** /} «Сказав это, всегда хорошо проверять наличие ошибок или предупреждений. я бы не рекомендовал этого, или вы можете зарегистрировать ошибку в файле в инструкции catch, вместо того, чтобы отображать ее обратно пользователю. –

+0

Отлично. Благодарю вас. – Brett

2

Date_parse_from_format возвращает массив, а не объект DateTime. Что вы хотите

$date = date_create_from_format('M jS Y', $date_str); 
      ^^^^^^---note the change 
echo date('Y-m-d', $date); 
+0

Да, это большое спасибо @Marc :-) – Brett

Смежные вопросы