2017-01-11 3 views
0

У меня есть функция, которая удаляет косые черты из ввода данных пользователя, чтобы сделать ее в формате ddmmYYYY.String to time return empty

function mydate($input) 
{ 
    $sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input); 
    return $sanitized; 
} 

я получил еще одну функцию, которая проверяет, что дата перед после этого

function datebefore($before,$after) 
{ 

    $before = substr($before,2,2)."-".substr($before,0,2)."-".substr($before,4,4); 
    $after = substr($after,2,2)."-".substr($after,0,2)."-".substr($after,4,4); 


    return strtotime($after)." > ".strtotime($before) ; 

    /* if(strtotime($after) < strtotime($before)) 
    { 
     return "The start date is after the end"; 
    } */ 
} 

Проблема имея Im что, когда до или после даты является более чем 1 день до текущей даты его возвращает пустую строку, а не временную метку

ответ

2

strtotime зависит от разделителя, чтобы решить, какой формат даты вы используете.

Если Seperator является - она предполагает разумный формат даты dd/mm/yyyy, если / он принимает американский формат даты mm-dd-yyyy.

Итак, ваша проблема заключается в том, что вы использовали seperator. Изменение формата dd-mm-yyyy и реорганизовать порядок вашего д, т, и у vaues и это будет хорошо

function datebefore($start,$end) 
{ 

    $s = sprintf('%s-%s-%s', substr($start,0,2), substr($start,2,2), substr($start,4,4)); 
    $e = sprintf('%s-%s-%s', substr($end,0,2), substr($end,2,2), substr($end,4,4)); 

    return strtotime($s) > strtotime($e) 
       ? 'The start date is after the end' 
       : 'The start date is before the end'; 
} 

function mydate($input) 
{ 
    $sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input); 
    return $sanitized; 
} 

$s = mydate('10/12/2016'); 
echo $s . PHP_EOL; 
$e = mydate('06/12/2016'); 
echo $e . PHP_EOL; 

$c = datebefore($s, $e); 
echo $c; 
+0

спасибо gotya, чтобы легко. – owen

0

Это потому, что strtotime не принимает вас в формате строки времени, а затем возвращает false.

Вы можете использовать DateTime::createFromFormat замену strtotime для создания даты и времени, а затем использовать opeator> для сравнения.

как:

var_dump(DateTime::createFromFormat('dmY', '11012017')); 
+0

Ссылка только ответ обескураживает на SO – RiggsFolly

+0

@RiggsFolly да, отредактировано. –