Ответ 1:
Вы можете использовать что-то вроде этого
$dateStr = date('Y-m-d', strtotime($someDate));
Con
Это не очень хорошо для читабельности кода, потому что не позволяет вам явно анализировать определенный формат и делать это очевидным в коде. Например, ваш код не будет очевиден для стороннего программиста относительно того, в каком формате $ someDate находился, так как strtotime анализирует несколько форматов.
Pro
Однако, если $ someDate может измениться, и вы хотите, чтобы код продолжал пытаться нормализовать различные форматы, это отличный выбор
Con
Если данные поступают в формате, который не поддерживается. Например, при попытке проанализировать дату в формате даты за пределами США, означающем, что месяц и день переключены, но формат использует прямую косую черту (21/04/78) Даты в форматах m / d / y или dmy устраняются путем в разделителе между различными компонентами: если разделитель является косой чертой (/), то предполагается американский m / d / y; тогда как если разделителем является тире (-) или точка (.), то предполагается, что используется европейский формат d-m-y.
Ответ 2:
Чтобы действительно прояснить ваш код относительно того, какую дату вы анализируете, и чтобы убедиться, что данные поступают в правильном формате, я бы использовал date_create_from_format. Вот некоторый код, чтобы помочь:
$server_date_str='06-10-2013 16:00:09';
$server_date_time = DateTime::createFromFormat('d-m-Y H:i:s',$server_date_str);
// check the format
if ( !($server_date_time instanceof DateTime) ) {
$error_array = DateTime::getLastErrors();
throw new Exception( implode(" - ",$error_array['errors']) );
}
//convert DateTime object to Unix time stamp
$server_time = strtotime($server_date_time->format('d-m-Y H:i:s'));
//convert Unix timestamp to date string of the format 2012-10-21
$dateStr = date('Y-m-d', $server_time);
Этот пример более подробно поясняется по этой ссылке:
http://boulderapps.co/parse-a-date-by-a-specific-date-format-in-php