2013-06-28 3 views
0
<?php 
// Convert MMDDYY to YYYY-MM-DD date format to be INSERTed 
// into MySQL TABLE. 
// If it can't convert the data because of an error, it returns 0000-00-00. 
date_default_timezone_set('America/New_York'); 

function date_convert($date_input) { 
    try { 
    $date = new DateTime($date_input); 
    $date_processed = $date->format('Y-m-d'); 
    } catch(Exception $e) { 
    echo "Wrong date format $date_input" . "\n"; 
    $date_processed = "0000-00-00"; 
} 
    return $date_processed; 
} 

// MMDDYY (January 1, 2000) 
$TRANSACTION_DATE_MMDDYY_raw = "010100"; 
echo date_convert($TRANSACTION_DATE_MMDDYY_raw) . "\n"; 
?> 

Выход: 2013-06-28Почему datetime возвращает сегодняшнюю дату вместо даты ввода?

Я ожидал, что это вернуть 2000-01-01, но это возвращение сегодняшнюю дату. Что мне не хватает? Как я могу это исправить? Благодаря!

+0

Я отправил свой ответ только для вас: http://stackoverflow.com/questions/17373007/how-to-check-for-a-failed-datetime-in-php/17373200# 17373200 – vikingmaster

ответ

1

PHP не имеет возможности узнать, что ваша дата сформирована как MMDDYY. Существует два способа решить эту проблему:

  • использовать один из «valid formats». Вы можете изменить свое входное значение или проанализировать его в допустимом формате с помощью некоторых строковых функций или регулярного выражения.
  • использовать статический метод createFromFormat, который поставляется с классом DateTime.

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

$date = new DateTime($date_input); 

в этом:

$date = DateTime::createFromFormat('mdy', $date_input); 
3

Вы должны использовать метод createFromFormat. См.: http://us2.php.net/manual/en/datetime.createfromformat.php

+0

Является createFromFormat, позволяющим указать формат ввода, и если i t не соответствует ему? – Edward

+1

'createFromFormat' указывает класс' DateTime', формат которого можно ожидать и проанализировать. Ваш формат «MMDDYY» будет «DateTime :: createFromFormat (« mdy », $ date_input);' будет вашим лучшим решением для создания объекта '$ date' в вашей функции' date_convert'. –

+1

Кроме того, согласно документам (http://www.php.net/manual/en/datetime.createfromformat.php), 'createFromFormat' действительно вернет' FALSE', если произойдет некоторая ошибка, а не действительная 'DateTime' пример. – CmdrMoozy

-1

Указанный формат не может быть преобразован/признан не соответствующим формату. Попробуйте '2000-01-01'

+0

Но данные я получение конвертирования осуществляется в формате MMDDYY. – Edward