PHP悖论中的日期比较
我有一个最奇怪的问题: 试图将今天的日期与PHP悖论中的日期比较,php,date,Php,Date,我有一个最奇怪的问题: 试图将今天的日期与$\u POST中的日期进行比较。我将参数处理如下: $str1 = date("d-m-Y"); $str2 = date("d-m-Y", strtotime($_POST['dateto'])); 我比较日期: if ($str2 >= $str1) { // doing what it is supposed to } else { echo "error"; } 现在,由于这会导致一个“错误”,并且我100%确定我输入的日期晚于今天的
$\u POST
中的日期进行比较。我将参数处理如下:
$str1 = date("d-m-Y");
$str2 = date("d-m-Y", strtotime($_POST['dateto']));
我比较日期:
if ($str2 >= $str1) {
// doing what it is supposed to
}
else {
echo "error";
}
现在,由于这会导致一个“错误”,并且我100%确定我输入的日期晚于今天的日期,因此我在逻辑if
之前回显它比较的参数,结果是:
2016年11月02日针对$str2
和2016年10月27日针对$str1
。很明显,今天是10月,输入日期是11月,但它仍然以false的形式运行逻辑运算符
有什么意见吗?您正在比较字符串,它们不一样 我在这里给大家留下一个使用示例:
$todays_Date= strtotime(date("d-m-Y H:i:00",time()));
$input_Date= strtotime("19-11-2008 21:00:00");
if($todays_Date> $input_Date){
echo "Input date is from the past";
}else{
echo "Input date is from the future";
}
您只需使用
strotime()
:
而不是
$str1 = date("d-m-Y");
$str2 = date("d-m-Y", strtotime($_POST['dateto']));
试一试
现在您必须使用unix时间戳进行比较。这些将给你你期望的结果
在日期为字符串第一部分的字符串上使用=
将导致意外结果,因为01-01-2016
小于20-07-2015
,即使在日历上进行比较时01-01-2016
在20-07-2015
之后(“大于”)
另一个选项是将
日期(“d-m-Y”)
更改为日期(“Ymd”)
,这意味着可以使用=
对日期进行评估。虽然时间戳在您的案例中似乎更简单 您可以将日期转换为时间,然后比较:
$str1 = time();
$str2 = strtotime($_POST['dateto']));
if ($str2 >= $str1) {
// doing what it is supposed to
}
else {
echo "error";
}
试试这个,使用
$format = "d-m-Y";
$date1 = DateTime::createFromFormat($format, date('d-m-y'));
$date2 = DateTime::createFromFormat($format, $_POST['dateto']);
if($date1 >= $date2){
// doing what it is supposed to
}
else {
echo "error";
}
因为您正在进行字符串比较<代码>0在
2
之前。使用DateTime对象并进行比较。Jon Stirling已经给了你正确的答案。另一个是,当您将格式从“d-m-Y”
更改为“Y-m-d”
时,即使字符串比较也可以工作。if(strotime($\u POST['dateto'])>=time()
另一个解决方案是比较mktime(0,0,0)
和strotime($\u POST['dateto'])
。我在另外两个页面中以相同的方式比较日期,但是我从SQL中获取的输入日期和所有内容似乎都运行得非常好。为什么不只是$todays\u date=time()
?或strotime(日期(“d-m-Y H:i:00”)代码><代码>日期()。我比较的日期是“d-m-Y”格式的,因此,在使用您建议的strotime()时,如何将SQL中的日期转换为正确的格式?这不仅会比较日期,还会比较小时数吗?这是否意味着date(“Y-m-d”)的结果不是datetime格式,而是字符串格式?我可以使用哪一行来转换datetime(意思是“Y-m-d”格式)从SQL转换为与$date1相同类型的对象,但使用的是“d-m-Y”格式?我尝试过:$date3=$row['date3'];$date3=DateTime::createFromFormat(“d-m-Y”,$date3);
但当我变量转储($date3)时,它只说“bool(false)”,我做到了!结果我应该首先应用date()在应用datetime::createfromformat.之前,将正确的格式设置为$date3。那么:$datetoday=date(“Y-m-d”);$sql=“SELECT*FROM”offers,其中usr\u id='$of_usr\u id'和date\u to>=$datetoday'";代码>这将始终可以正常工作,对吗?当像那样使用SQL查询时?@Frank Helligberger:也可以。如果没有,请尝试此操作,'从提供中选择*,其中usr_id='$of_usr_id'和DATE_格式(DATE_to,'%Y-%m-%d%H:%i')>='$datetoday';'如果我尝试这样做:$datetoday=date(“Y-m-d”)$sql=“SELECT*FROM报价,其中usr\U id='$of\U usr\U id'和date\U to>='$DATETODOY'代码>这将永远不会出现问题,对吗?谢谢!现在,如果我尝试这样做:$datetoday=date(“Y-m-d”)$sql=“SELECT*FROM报价,其中usr\U id='$of\U usr\U id'和date\U to>='$DATETODOY'代码>这将始终可以正常工作,对吗?
$str1 = time();
$str2 = strtotime($_POST['dateto']));
if ($str2 >= $str1) {
// doing what it is supposed to
}
else {
echo "error";
}
$format = "d-m-Y";
$date1 = DateTime::createFromFormat($format, date('d-m-y'));
$date2 = DateTime::createFromFormat($format, $_POST['dateto']);
if($date1 >= $date2){
// doing what it is supposed to
}
else {
echo "error";
}