我有一个日期检查程序,用于检查日期是否在其他两个日期之间,但是它无法正常工作。
$maxDate = date('d/m/Y');
$minDate = date('d/m/Y', strtotime("-30 days"));
$date = $unit['date_recorded'];
var_dump($date)
返回:
string(19) "2016-05-02 15:27:15"
现在我有声明:
if ($date >= $minDate AND $date <= $maxDate) { // do something }
但它永远不会触发此声明,即使我尝试使用$date
转换date("d/m/Y", $date)
或使用strtotime()
上的$date
或所有变量。
我做错了什么?
答案 0 :(得分:2)
两个日期必须具有相同的格式才能进行比较。
如果我尝试使用
转换$ datedate("d/m/Y", $date)
它不起作用的原因是因为date函数接受时间而不是字符串。
要使其有效,您必须
date("d/m/Y", strtotime($date))
然而,这只是一个问题。您无法将日期与d/m/Y
进行比较的原因是:
$minDate = date('d/m/Y', strtotime("-30 days")); // 30/04/2016
$maxDate = date('d/m/Y'); // 30/05/2016
$date = date('d/m/Y', strtotime($unit['date_recorded'])); // 02/05/2016
如您所见,$date
以 02 开头,小于$minDate
30 。它在一年或一个月之前考虑了这一天。因此,它永远不会进入你的案件。
为测试目的声明$unit['date_recorded']
的值:
$unit['date_recorded'] = "2016-05-02 15:27:15";
现在我们有了一个单位变量的值,这是我们如何进行的:
$minDate = date('Y-m-d', strtotime("-30 days"));
$maxDate = date('Y-m-d');
$date = $unit['date_recorded'];
if($date >= $minDate && $date <= $maxDate)
echo "Do something...";
$minDate = strtotime("-30 days");
$maxDate = time();
$date = strtotime($unit['date_recorded']);
if($date >= $minDate && $date <= $maxDate)
echo "Do something...";
答案 1 :(得分:0)
迟到的答案,但在这里:
$date = new DateTime("2016-05-02 15:27:15");
$maxDate = new DateTime();
$minDate = new DateTime($maxDate->format());
$minDate->modify('-30 day');
if ($date >= $minDate and $date <= $maxDate)
{
//...
}
答案 2 :(得分:-1)
您可能在if子句中遇到优先级问题。
尝试添加更多括号: if(($ date&gt; = $ minDate)&amp;&amp;($ date&lt; = $ maxDate)){...
并检查是否有效。