2014-02-07 3 views
-1

Мне нужно преобразовать строку даты в этот формат: «d/m/Y» строка даты для конвертирования из, не всегда одна и та же, иногда ее 07/02/2014, иногда 13/02/2014, а иногда и 2014-02-07.strtotime return false для определенных дат

Я использую эту команду для преобразования: date("d/m/Y", strtotime($datestring))

я заметил, что иногда я получаю 01.01.1970 из-за ложными что StrToTime возвращается. я сузил его к этому: strtotime("07/02/2014") возвращает 1409605200, который нормально .... strtotime("13/02/2014") возвращает ложь !!!!

все сообщения о strtotime здесь, в этом форуме. также это решение не поможет, потому что я не знаю, конкретный формат заранее:

$a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);

что здесь проблема ?? Какое решение мне нужно?

+0

Если вы * * даже не знаю, формат времени, как 'strtotime' волшебно должен? Он просто не может правильно угадать каждый раз. – deceze

+0

все еще не отвечает, почему 13/02/2014 терпит неудачу, пока 09-й день не ... – Rodniko

+2

Потому что XX/XX/XXXX интерпретируется как M/D/Y. См. Http://3v4l.org/uYIAu. Это, очевидно, не удастся, если M равно 13. Вы уверены, что 07/02/2014 был * действительно * интерпретирован «хорошо»? – deceze

ответ

2

Вы можете сделать это следующим образом:

/** This method will convert a datestring to d/m/Y 
* and respect therefore d/m/Y for incoming value 
* @params $dateString 
* @retun $dateString 
*/ 

function getMyDate($dateString) 
{ 
    $dateString = str_replace('/', '-', $dateString); 
    $date = new DateTime($dateString); 
    return $date->format('d/m/Y'); 
} 

//---------------------------- 
$var = '13/02/2014 '; 
echo getMyDate($var); 
//--> returns: 13/02/2014 

$var = '2014-02-07'; 
echo getMyDate($var); 
//--> returns: 07/02/2014 

SQL скрипку: http://ideone.com/TTRDTA

+0

никогда не думал о том, что ха-ха :) слишком перепутался с strtotime .... – Rodniko