Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP悖论中的日期比较_Php_Date - Fatal编程技术网

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";
}