我正在尝试这个,自从我上次用PHP编码以来已经有一段时间了。
我有一个函数可以检查给定日期是否在日期范围之间:
pr($this->isDateBetween("2014-11-15", "2014-12-05", "2014-06-14"));
public function isDateBetween($dt_start, $dt_check, $dt_end){
if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){
return true;
} else{
return false;
}
}
但似乎我越来越false
.预期结果应true
,因为2014-12-05
小于2014-06-14
。
12月不到6月,所以应该是真的吗?
也当我2014-06-14
更改为2014-12-14
时,它变成了现实。
抱歉,我不再更新 PHP。请耐心等待。
编辑
尝试将它们转换为 strtotime,但仍然得到错误的结果
解决方案存在在这里:
如何检查日期是否在给定范围内?
溶液:
将它们转换为时间戳是可以正常工作的方法,使用 strtotime,例如
$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';
check_in_range($start_date, $end_date, $date_from_user);
function check_in_range($start_date, $end_date, $date_from_user)
{
// Convert to timestamp
$start_ts = strtotime($start_date);
$end_ts = strtotime($end_date);
$user_ts = strtotime($date_from_user);
// Check that user date is between start & end
return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
}
预期结果应为 true,因为 2014-12-05 小于 2014-06-14 。
完全错了。代码正在工作。6月14日比12月12日"少"。因此,您的 12 月 12 日日期不在开始/结束日期之间。它已经过了范围的尽头。
预期结果应为 true,因为 2014-12-05 小于 2014-06-14 。
绝对不行。预期结果不是true
。它是false
,因为"2014-12-05"
不小于"2014-06-14"
。12月不到6月?以前从未听说过如此奇特的逻辑。
另外,当我将 2014-06-14 更改为 2014-12-14 时,它变成了真的。
没错。因为"2014-12-05"
肯定小于"2014-12-14"
,所以true
。 5 December
明显小于14 December
。
这与 PHP 版本或 PHP 内置方法无关。这完全是关于你的逻辑。
我认为这就是你要找的:
pr($this->isDateBetween("2014-06-14", "2014-11-15", "2014-12-05"));
public function isDateBetween($dt_start, $dt_check, $dt_end){
if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){
return true;
} else{
return false;
}
}
这将返回true
.