PHP检查两个date之间的date
我从Stackoverflow得到了这个代码,并稍微改变了它与今天的date一起工作。
我想检查,如果今天适合两个date之间。 但是这不起作用。 我错过了什么?
$paymentDate = date('d/m/Y'); echo $paymentDate; // echos today! $contractDateBegin = date('d/m/Y', '01/01/2001'); $contractDateEnd = date('d/m/Y', '01/01/2015'); if ($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd) { echo "is between"; } else { echo "NO GO!"; }
这是你的代码的正确答案..只需使用strtotime() PHP函数
$paymentDate = date('Ym-d'); $paymentDate=date('Ym-d', strtotime($paymentDate));; //echo $paymentDate; // echos today! $contractDateBegin = date('Ym-d', strtotime("01/01/2001")); $contractDateEnd = date('Ym-d', strtotime("01/01/2012")); if (($paymentDate > $contractDateBegin) && ($paymentDate < $contractDateEnd)) { echo "is between"; } else { echo "NO GO!"; }
你不能比较datestring。 使用PHP的DateTime
对象是很好的习惯:
$paymentDate = new DateTime(); // Today echo $paymentDate->format('d/m/Y'); // echos today! $contractDateBegin = new DateTime('2001-01-01'); $contractDateEnd = new DateTime('2015-01-01'); if ( $paymentDate->getTimestamp() > $contractDateBegin->getTimestamp() && $paymentDate->getTimestamp() < $contractDateEnd->getTimestamp()){ echo "is between"; }else{ echo "NO GO!"; }
如果小时重要:
$paymentDate = strtotime(date("Ymd H:i:s")); $contractDateBegin = strtotime("2014-01-22 12:42:00"); $contractDateEnd = strtotime("2014-01-22 12:50:00"); if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd) { echo "is between"; } else { echo "NO GO!"; }
您将比较date作为string,这是行不通的,因为比较是字典。 这与sorting文本文件时的问题是一样的,在文本文件中行20
会出现在行100
因为内容不被视为数字,而是被视为ASCII码的序列。 另外,创build的date都是错误的,因为您使用的是期望时间戳的string格式string(第二个参数)。
相反,您应该比较DateTime
对象的时间戳,例如:
$paymentDate = date_create(); $contractDateBegin = date_create_from_format('01/01/2001', 'd/m/Y'); $contractDateEnd = date_create_from_format('01/01/2015', 'd/m/Y');
您现有的条件将正常工作。
直接使用
$paymentDate = strtotime(date("dmY")); $contractDateBegin = strtotime("01-01-2001"); $contractDateEnd = strtotime("01-01-2015");
然后比较就可以了,因为你的01-01-2015对于PHP的32位date范围是有效的,在strtotime的手册里有说明。
根据luttken的回答。 以为我会添加我的扭曲:)
function dateIsInBetween(\DateTime $from, \DateTime $to, \DateTime $subject) { return $subject->getTimestamp() > $from->getTimestamp() && $subject->getTimestamp() < $to->getTimestamp() ? true : false; } $paymentDate = new \DateTime('now'); $contractDateBegin = new \DateTime('01/01/2001'); $contractDateEnd = new \DateTime('01/01/2016'); echo dateIsInBetween($contractDateBegin, $contractDateEnd, $paymentDate) ? "is between" : "NO GO!";
另一个解决办法就是把date写成Ymd。
写在这个“格式”这是很容易比较date。
$paymentDate = date('Ymd'); // on 4th may 2016, would have been 20160504 $contractBegin = 20010101; $contractEnd = 20160101; echo ($paymentDate >= $contractBegin && $paymentDate <= $contractEnd) ? "Between" : "Not Between";
它将一直工作于一年中的每一天,而不依赖于任何函数或转换(PHP会考虑$paymentDate
的int值与contractBegin
和contractEnd
的int值进行比较)。