2013-11-25 4 views
4

Я конвертировал одну переменную в временную метку unix для checl независимо от того, является ли она действительной датой или нет .Format - dd/mm/yy. Мой код нижеПроверка действительной даты в php не работает

<?php 
$date1='24/11/2013'; 
$date2='09/11/2013'; 
$date3='yuyuy1909090';//CAN BE ANYTHING 

if(strtotime($date1)>0){ 
    echo "valid date1"; 
} 
if(strtotime($date2)>0){ 
    echo "valid date2"; 
} 
if(strtotime($date3)>0){ 
    echo "valid date2"; 
} 


?> 

но если говорит только $date2 действительно, я не могу изменить формат даты, потому что речь идет о форме 3-й партии плоский файл ...

Что может быть проблема?

+0

Вы можете использовать 'preg' функции и' mktime' – sectus

+0

Вы действительно не должны использовать 'StrToTime 'для проверки правильности строки даты. – Munim

ответ

1

Поскольку strtotime считает, что 24/11/2013 находится в американском формате, поскольку даты со слэшами интерпретируются как m/d/y, и нет 11-го числа 24-го месяца, поэтому он терпит неудачу.

если вы сделали

strtotime('11/24/2013'); 

вместо этого, он будет работать.

Если вы хотите сохранить дату в таком формате и по-прежнему использовать StrToTime, вы могли бы сделать

strtotime(str_replace('/', '-', '24/11/2013')); 

в качестве даты с дефисом интерпретируется как d-m-y формат

5

Если вы знаете правильный формат, вы можно использовать:

$date = DateTime::createFromFormat('d/m/Y', $date1); 
if ($date->getTimestamp() > 0) { 
    echo 'valid date1'; 
} 
+0

почти рядом, но не получил решение, см. Отредактированный вопрос. –

+0

Вызов функции-члена getTimestamp() для не-объекта, когда в try date = 'yuyyu' i.e формат без даты .. infact все может быть получено из плоского файла –

0

когда дата $date1='yuyuy1909090' затем

$date = DateTime::createFromFormat('d/m/Y', $date1); 
if ($date->getTimestamp() > 0) { 
    echo 'valid date1'; 
} 

В таком случае это даст ошибку, так что лучше, чтобы добавить одну строку больше для проверки регулярных выражений

if(preg_match("/^\d{1,2}\/\d{1,2}\/\d{4}/",$date1){ 
    $date = DateTime::createFromFormat('d/m/Y', $date1); 
    if ($date->getTimestamp() > 0) { 
     echo 'valid date1'; 
    } 
} 
Смежные вопросы