У меня есть приложение, которое я создаю с помощью CodeIgniter. У меня есть записи в БД SQL Server, у которых есть поля datetime.
Я запрашиваю эти записи из дат, введенных в текстовое поле в m / d / Y. Это соответствует формату даты в db.
К сожалению, я в Великобритании! Поэтому я хочу вводить даты в формате d / m / Y. Поэтому мне нужно зафиксировать это, отформатировать его в соответствующем формате и затем проверить его.
Вот код в использовании для форматирования:
$datestring = "%m/%d/%Y"; if(isset ($_POST['from_date']) AND isset ($_POST['to_date'])){ $from = mdate($datestring, strtotime($_POST['from_date'])); $to = mdate($datestring, strtotime($_POST['to_date']));
Я использую mdate из помощника даты CI, но он почти такой же, как date (), я думаю.
Если я введу данные 13/12/2010, отправьте форму и дампируйте новую дату, которую она выйдет, как
string(10) "02/06/2011"
Как это произошло?
Может кто-нибудь протянуть руку? : D
Билли
Ответ заключается в том, что в европейском формате даты используются тире, а не косые черты.
Согласно руководству :
Заметка:
Даты в форматах m / d / y или dmy устраняются неоднозначно, глядя на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что американский m / d / y; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат dmy.
Использование правильного формата работает как шарм:
// American format // $_POST['from_date'] = "02/06/2011"; $yankeeTimestamp = strtotime($_POST['from_date']); // European format // $_POST['from_date'] = "06-02-2011"; $euroTimestamp = strtotime($_POST['from_date']); echo date("m/d/Y", $yankeeTimestamp); // returns 02/06/2011 echo date("m/d/Y", $euroTimestamp); // returns 02/06/2011
То, что я сделал бы, – это взорвать дату на '/' и сделать новую дату с помощью mktime:
$from = explode('/', $_POST['from_date']); $from = mktime(0, 0, 0, $from[1], $from[0], $from[2]); $from = mdate($datestring, $from);