我在比较php中的两个日期时遇到了问题。
问题:当比较上午12:00(午夜)到例如上午10:00(上午)时,以下代码将无法正常运行。根据人类逻辑10:00 AM晚于12:00 AM。但计算机似乎没有意识到这一点。
有没有办法以不同的方式做到这一点?
date_default_timezone_set('Europe/Athens');
$today = date("d-m-Y h:i:s A");
$today = date("d-m-Y h:i:s A",strtotime($today));
$max = date('d-m-Y h:i:s A', strtotime("31-12-2015 23:59:00"));
$min = date('d-m-Y h:i:s A', strtotime("14-12-2015 00:00:01"));
if (($today > $min) && ($today < $max)){
//do something
} else {
//something else done
}
答案 0 :(得分:2)
您可以使用date_create()
&amp; date_diff()
PHP内置函数,用于比较两个日期,在您的场景中它将对您有所帮助。
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff = date_diff($date1,$date2);
echo $diff->format("%R%a days");
答案 1 :(得分:2)
因为date()
返回String。
来自manual:
返回值
返回格式化的日期字符串。如果将非数字值用于时间戳,则返回FALSE并发出E_WARNING级别错误。
基本上,你的代码试图做的是这样的:
if("31-12-2015 23:59:00 PM" < "14-12-2015 00:00:01 AM") {
.......
}
因此,PHP将忽略“AM”或“PM”字符串,只是比较数值。
编辑:来自comparison operator手册:
如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都为converted to a number,并且数字执行比较。
因此,因为PHP再次转换它们的值,所以您的代码完全比较了不同的值。
有没有办法以不同的方式做到这一点?
只需与strtotime
值进行比较。
$today = strtotime("now");
$max = strtotime("31-12-2015 23:59:00");
$min = strtotime("14-12-2015 00:00:01");
if (($today > $min) && ($today < $max)){
//do something
}else{
//something else done
}
以后再使用date
格式化您的值到AM / PM格式(如果需要)。
答案 2 :(得分:1)
试试这样..
date_default_timezone_set('Europe/Athens');
$today = date("d-m-Y h:i:s A");
$max = date('d-m-Y h:i:s A', strtotime("31-12-2015 23:59:00"));
$min = date('d-m-Y h:i:s A', strtotime("14-12-2015 00:00:01"));
if ((strtotime($today) > strtotime($min)) && (strtotime($today) < strtotime($max))){
//do something
}else{
//something else done
例如:
if (strtotime("12:00 AM")>strtotime("10:00 AM")){
echo "do something";
}else{
echo "something else done";
}
//输出“其他事情完成”;