检查日期是否在PHP strtotime范围内

时间:2016-02-01 03:26:19

标签: php datetime

我搜索了SO,但我尝试过的答案似乎并没有解决我的问题。 我有这个简单的代码片段,用户将输入一个数字日期和一个月,应用程序将返回相应的Zodiac Sign。

$birthdate = $_POST["birthdate"];
$birthmonth = (ucwords(strtolower($_POST["month"])))

//validations here. . .

    $tmp = $birthmonth . " " . $birthdate;
    $tmp2 = date_create_from_format('M j', $tmp);

    $formatted_dob = date_format($tmp2, 'm-d-Y'); 
    $dob = strtotime($formatted_dob);

    echo $formatted_dob;

    if ($dob >= strtotime('01-20-2016') && $dob <= strtotime('02-18-2016')) {
        echo "Aquarius"; 
    } elseif ($dob >= strtotime('02-19-2016') && $dob <= strtotime('03-20-2016')){          
        echo "Pisces";
    } 

echo块之外的那些if-else内容工作正常,但是如果我输入25和2月的值(稍后将结果输入02-25-2016),则它总是输出{{ 1}}。你如何比较两个Aquarius值?

我尝试使用strtotime对象,但它只给我一个错误,这是另一个故事。提前谢谢。

1 个答案:

答案 0 :(得分:1)

编辑: 更改日期的顺序(*您的日期格式01-20-2016 mdY,这就是为什么当您将其转换为1970-01-01&#39; Ym-d&#39;但如果您更改它进入2016-01-20&#39; Ym-d&#39;在您的日期范围内,代码将在else-if中正常工作。

$birthdate = $_POST["birthdate"];
$birthmonth = (ucwords(strtolower($_POST["month"])))

//validations here. . .

    $tmp = $birthmonth . " " . $birthdate;
    $tmp2 = date_create_from_format('M j', $tmp);

    $formatted_dob = date_format($tmp2, 'm-d-Y'); 
    $dob = strtotime($formatted_dob);

    echo $formatted_dob;
$dobcompare = date_create(date('m/d/Y', $dob));
$aqstartdate = date_create(date('m/d/Y', strtotime('2016-01-20')));
$aqenddate = date_create(date('m/d/Y', strtotime('2016-02-18')));
$pistartdate = date_create(date('m/d/Y', strtotime('2016-02-19')));
$pienddate = date_create(date('m/d/Y', strtotime('2016-03-20')));

    if ($dobcompare >= $aqstartdate && $dobcompare <= $aqenddate) {
        echo "Aquarius"; 
    }
    elseif ($dobcompare >= $pistartdate && $dobcompare <= $pienddate) {
        echo "Pisces"; 
    } else {          
        echo "IDK";
    } 

根据需要修改它。

这是示例enter link description here