PHP: Помогите с этим форматированием даты - PullRequest
2 голосов
/ 06 февраля 2011

У меня есть приложение, которое я создаю с CodeIgniter. У меня есть записи в базе данных SQL Server, которые имеют поля даты и времени.

Я запрашиваю эти записи по датам, введенным в текстовое поле в m / d / 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

Билли

Ответы [ 2 ]

4 голосов
/ 06 февраля 2011

Ответ заключается в том, что в европейском формате даты используются тире, а не косые черты.

Согласно инструкции :

Примечание:

Даты в форматах m / d / y или d-m-y двусмысленны, глядя на разделитель между различными компоненты: если разделитель является косая черта (/), то американский м / д / у предполагается; тогда как, если разделитель является тире (-) или точка (.), затем Предполагается европейский формат d-m-y.

Использование правильного формата работает как шарм:

// 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
1 голос
/ 06 февраля 2011

Что бы я сделал, это взорвал дату на '/' и сделал новую дату с помощью mktime:

$from = explode('/', $_POST['from_date']);
$from = mktime(0, 0, 0, $from[1], $from[0], $from[2]);
$from = mdate($datestring, $from);
...