проанализировать строку даты

У меня есть эта строка в переменной post

'03/21/2011' 

Мне нужно разобрать его через php и превратить его в этот формат

 '2011-03-21' 

Я использую php, и мне нужен этот формат, поэтому я могу запустить этот запрос

 SELECT prospect as 'Prospect', company as 'Company', industry as 'Industry', created_at as 'Original Date Submitted', software as 'Software', warm_transfer as 'Warm Transfer', UserName as 'Sales Rep' FROM mercury_leads join user on UserID=user_id WHERE created_at BETWEEN '2011-01-01' AND '2011-03-22' 

Если вы хотите обработать его в PHP, лучше всего использовать strtotime() которая преобразует строку во время, которое затем можно манипулировать с помощью функции date() .

Таким образом, вы бы сделали что-то вроде:

 $dateStr = date('Ym-d', strtotime('03/21/2011')); 

Хорошая вещь об использовании strtotime() заключается в том, что вам не нужно беспокоиться о точном формате строки, в которую вы проходите. Пока это что-то полу-разумное, оно будет конвертировать ее.

Таким образом, он будет обрабатывать 03/21/2011 , 3-21-2011 , 03-21-11 без каких-либо изменений или особых случаев.

Вы можете анализировать его даже из mysql

 select str_to_date('03/21/2011','%m/%d/%Y') 
 $date = '03/21/2011'; $timestamp = strtotime($date); $sqlDate = date('Ym-d', $timestamp); 

Это должно делать то, что вам нужно.

StrToTime

Дата

 $items=explode('/','03/21/2011'); $time=mktime(0,0,0,$items[0],$items[1],$items[2]); $isodate=date('Ym-d',$time); 

Хотя есть много способов сделать это, я думаю, что проще всего понять и применить ко всем преобразованиям даты:

 $date = date_create_from_format('n/d/Y', $date)->format('Yn-d'); 

Это явно, и вам никогда не придется задаваться вопросом о m / d или d / m и т. Д.

Вы можете видеть это здесь

http://www.codegod.de/WebAppCodeGod/PHP-convert-string-to-date–AID597.aspx

Или используйте класс Date PHP 5.3

STR_TO_DATE (created_at, '% m /% d /% Y') в качестве «Исходной даты отправлено».

Ответ 1:

Вы можете использовать что-то вроде этого

 $dateStr = date('Ym-d', strtotime($someDate)); 

Против

Это не очень удобно для чтения кода, поскольку он не позволяет явно анализировать определенный формат и делать это очевидным в коде. Например, ваш код не будет очевидным для внешнего программиста относительно того, какой формат был $ someDate, поскольку strtotime анализирует несколько форматов.

профессионал

Однако, если $ someDate может быть изменен, и вы хотите, чтобы код продолжал пытаться нормализовать различные форматы, это отличный выбор

Против

Если данные поступают в формате, который не поддерживается. Например, когда вы пытаетесь проанализировать дату в формате, отличном от США, что означает, что месяц и день переключаются, но формат использует косые черты (21/04/78). Даты в форматах m / d / y или dmy устраняются путем поиска на разделителе между различными компонентами: если разделитель является косой чертой (/), то предполагается, что американский m / d / y; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат dmy.

Ответ 2:

Чтобы на самом деле сделать ваш код понятным в отношении какой даты вы разбираете и проверить, что данные поступают с использованием правильного формата, я бы использовал date_create_from_format. Вот несколько кодов, которые помогут:

 $server_date_str='06-10-2013 16:00:09'; $server_date_time = DateTime::createFromFormat('dmY 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('dmY H:i:s')); //convert Unix timestamp to date string of the format 2012-10-21 $dateStr = date('Ym-d', $server_time); 

Этот пример объясняется более подробно по этой ссылке:

http://boulderapps.co/parse-a-date-by-a-specific-date-format-in-php