У меня есть эта строка в переменной 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