比较PHP paradox

时间:2016-10-27 11:50:10

标签: php date

我有一个最奇怪的问题:

尝试将今天的日期与$_POST的日期进行比较。我按如下方式处理参数:

$str1 = date("d-m-Y");
$str2 = date("d-m-Y", strtotime($_POST['dateto']));

我比较日期:

if ($str2 >= $str1) {
// doing what it is supposed to
}
else {
echo "error";
}

现在因为这导致了“错误”,我100%肯定我输入的日期晚于今天的日期,我echo - 在逻辑{{1}之前比较它所比较的​​参数结果是: 02-11-2016 if 27-10-2016 $str2。今天是十月份,输入日期是十一月,但它仍然以 false 的形式运行逻辑运算符。

有什么意见吗?

5 个答案:

答案 0 :(得分:1)

您正在比较字符串,它们不一样......

我在这里留下一个使用示例:

$todays_Date= strtotime(date("d-m-Y H:i:00",time()));
$input_Date= strtotime("19-11-2008 21:00:00");
if($todays_Date> $input_Date){
    echo "Input date is from the past";
}else{
    echo "Input date is from the future";
}

答案 1 :(得分:1)

您只需使用strtotime()

即可
if( strtotime($_POST['dateto']) >= strtotime(date('Y-m-d')) )
{
    // Do what you're supposed to here.
}
else
{
    echo "error";
}

答案 2 :(得分:0)

而不是

$str1 = date("d-m-Y");
$str2 = date("d-m-Y", strtotime($_POST['dateto']));

尝试

$str1 = time();
$str2 = strtotime($_POST['dateto']);

现在你必须unix时间戳来比较。这些将为您提供您期望的结果。

在字符串的第一部分的字符串上使用>=将导致意外结果,因为01-01-2016小于20-07-2015,即使在日历上进行比较{{ 1}}比01-01-2016之后('大于')。

另一种选择是将20-07-2015更改为date("d-m-Y"),这意味着可以使用date("Ymd")评估日期。虽然时间戳在您的情况下似乎更简单。

答案 3 :(得分:0)

您可以将日期转换为时间,然后进行比较:

$str1 = time();
$str2 = strtotime($_POST['dateto']));

if ($str2 >= $str1) {
// doing what it is supposed to
}
else {
echo "error";
}

答案 4 :(得分:0)

试试这个,使用 createFromFormat

$format = "d-m-Y";
$date1  = DateTime::createFromFormat($format, date('d-m-y'));
$date2  = DateTime::createFromFormat($format, $_POST['dateto']);    
if($date1 >= $date2){
// doing what it is supposed to
}
else {
echo "error";
}