我想在我的输入表单中添加验证规则,这样人们就无法选择比今天更高的日期但由于某种原因,我的运营商没有像他们应该的那样工作......至少我不认为他们是
//plain use of comparison operators
$a = 4; $b = 4;
if($a <= $b) { echo "umm?"; } // this return true
date_default_timezone_set('Europe/Copenhagen');
$timezone = date_default_timezone_get();
$today = date("d/m/y");
if(!empty($date['dateA']) && (date($date['dateA']) <= $today)) {
现在,最后一个if
语句的$today
值与$date
数组格式的格式相同。
以下是推动我的事情......如果:
$today = 08/02/2015
$date = 07/02/2015
返回true
$date = 08/02/2015
返回false,为什么不返回true
?
当我使用<=
确保$date
不能高于$today
时,那么为什么赢得$date <= $today
当他们获得相同的价值时,不返回true
?
据我所知,它的行为或多或少像$date < $today
另外,我已经尝试使用strtotime
代替$date
的日期,但它的行为仍然相同......
那该怎么办?
答案 0 :(得分:3)
我不知道你为什么要坚持字符串比较。我建议使用数学运算和数学数字。
这样做:
if(strtotime($date) < time())
{
// then allow doing something
}
strtotime()
将您已有的日期字符串(例如:"22/5/2014"
)转换为整数时间戳。 time()
也会返回今天的时间戳。然后,您可以使用这两个数字来执行操作。
虽然以上内容完全有效,但您也可以在PHP中使用Date Object,它非常精确并且隐式计算诸如闰年等内容。
PHP的文档示例:
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
答案 1 :(得分:1)
目前它首先检查较低的日期编号,当它应该首先检查年份时,因为字符串比较从左到右一次检查1个字符。
您可以将日期格式存储在年/月/日以解决此问题,但这样做有点难看。
我建议使用时间戳,这是自1970年1月1日00:00:00 GMT以来的秒数,并且可以通过调用time()来检索PHP,该时间给出当前时间戳。您可以通过调用strtotime()来检索特定日期的时间戳。
答案 2 :(得分:1)
您当前正在使用字符串比较,这不是推荐的比较日期的方法。但是,我不知道为什么等式检查失败,但我认为你应该使用DateTime对象:http://php.net/manual/en/class.datetime.php(仅当你使用PHP&gt; = 5.2.2时,因为PHP手册说DateTime比较确实在以前的版本中无法正常工作)
在你的情况下,最后一行将成为:
if(!empty($date['dateA']) && DateTime::createFromFormat('d/m/Y', $date['dateA']) <= DateTime::createFromFormat('d/m/Y', $today))