2014-01-27 5 views
0

Я не могу понять, что это неправильна йота это код, который я написал, и почему она имеет неинтуитивное поведениеWeird поведения сравнения strotime

if(($datav == 0) || ((strtotime($datav)) > (strtotime('01/01/2014')))) { 
echo 'yes'; 
} 

else if((strtotime($datav)) < (strtotime('01/01/2014'))) { 
echo 'no'; 
     } 

$ datav является переменной датой, которые могут или не могут быть установлены в в форме Wordpress, которую я написал.

вот что происходит: если дата не установлена ​​(== 0), код работает, он перекликается с «да»; если дата установлена ​​и находится до 01/01/2014, она также работает, она отгоняет «нет»; но если дата установлена ​​и после 01/01/2014 она не работает, а эхо «нет». в третьем случае, я уверен, что я установил правильную дату (дата после 01/01/2014), потому что я повторил ее, чтобы проверить ее.

Что я делаю неправильно? Спасибо всем.

+0

Какой формат даты вы передаете в '$ datav' –

+0

StrToTime требователен форматов даты она работает. Если вы форматируете дату YYYY-MM-DD, она работает, иначе, как сейчас, она принимает ММ/ДД/ГГГГ. – bumperbox

+1

Вы можете просто решить эту проблему самостоятельно, если бы вы просто отлаживали свои переменные и 'strtotime()', например: 'var_dump (strtotime ($ datav))' и т. Д. Вы бы быстро увидели, что результат, вероятно, «false» или неправильная метка времени ... –

ответ

0
<?php 

$datav = 0; 

test('2014-01-01'); 

test('2015-01-01'); 

test('01/01/2013'); 

test('25/12/2014'); // fail because strtotime will resolve as 1970-01-01 

function test($datav) { 

    echo "Input Date: $datav = "; 

    $timestamp = strtotime($datav); 

    if ($datav == 0 || $timestamp > strtotime('01/01/2014')) { 
     echo 'yes'; 
    } else if ($timestamp < strtotime('01/01/2014')) { 
     echo 'no'; 
    } else { 
     echo 'neither'; 
    } 

    echo " - What strtotime thinks was input (".date('d-M-Y', $timestamp).")<br />"; 
} 
Смежные вопросы