Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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/8/linq/3.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 我的日期检查对账单不是';t工作不正常_Php_Date - Fatal编程技术网

Php 我的日期检查对账单不是';t工作不正常

Php 我的日期检查对账单不是';t工作不正常,php,date,Php,Date,我有一个日期检查器,可以检查一个日期是否介于其他两个日期之间,但它不能正常工作 $maxDate = date('d/m/Y'); $minDate = date('d/m/Y', strtotime("-30 days")); $date = $unit['date_recorded']; var\u dump($date)返回: string(19) "2016-05-02 15:27:15" 现在我有一个声明: if ($date >= $minDate AND $date &l

我有一个日期检查器,可以检查一个日期是否介于其他两个日期之间,但它不能正常工作

$maxDate = date('d/m/Y');
$minDate = date('d/m/Y', strtotime("-30 days"));
$date = $unit['date_recorded'];
var\u dump($date)
返回:

string(19) "2016-05-02 15:27:15"
现在我有一个声明:

if ($date >= $minDate AND $date <= $maxDate) { // do something }
如果($date>=$minDate和$date问题#1
两个日期必须具有相同的格式才能进行比较

问题2 如果我尝试将$date转换为
date(“d/m/Y,$date)

它不起作用的原因是函数接受时间,而不是字符串

要让它发挥作用,你必须

date("d/m/Y", strtotime($date))
但是,这只是一个次要问题。您无法将日期与日期进行比较的原因是:

$minDate = date('d/m/Y', strtotime("-30 days")); // 30/04/2016
$maxDate = date('d/m/Y'); // 30/05/2016
$date = date('d/m/Y', strtotime($unit['date_recorded'])); // 02/05/2016
如您所见,
$date
02开头,它小于
$minDate
30。它考虑的是年前的一天,或者月前的一天。因此,它永远不会进入您的if案例

解决方案#1-将所有日期转换为Y-m-d格式 声明
$unit['date\u recorded']
的值,以便进行测试:

$unit['date_recorded'] = "2016-05-02 15:27:15";
现在我们有了一个单位变量的值,下面是我们的步骤:

$minDate = date('Y-m-d', strtotime("-30 days"));
$maxDate = date('Y-m-d');
$date = $unit['date_recorded'];

if($date >= $minDate && $date <= $maxDate)
    echo "Do something...";
$minDate=date('Y-m-d',strottime(“-30天”);
$maxDate=日期('Y-m-d');
$date=$unit['date_recorded'];

如果($date>=$minDate&&$date=$minDate&&$date您可能会在if子句中遇到优先级问题

尝试添加更多括号:
如果($date>=$minDate)&($date迟了回答,那么答案如下:

$date = new DateTime("2016-05-02 15:27:15");
$maxDate = new DateTime();
$minDate = new DateTime($maxDate->format());
$minDate->modify('-30 day');
if ($date >= $minDate and $date <= $maxDate)
{ 
 //... 
}
$date=新的日期时间(“2016-05-02 15:27:15”);
$maxDate=新的日期时间();
$minDate=新日期时间($maxDate->format());
$minDate->修改('-30天');

如果($date>=$minDate和$date,只需使用
time()
并比较秒数(unix时间),它的格式不同,日期('d/m/Y')和2016-05-02 15:27:15@AlonEitan,我试过了,但是变量的
var\u dump()
返回相同的数字:
int(1464638248)
int(1464638248)
int(1464638248)
。正确吗?@grasshopper,如上所述,即使我使用了
$date=date(“d/m/Y”,$date)
结果也是一样的。谢谢你的答案,尝试了一下,没有用。(顺便说一句,不是我把你的答案标记为无用)。没问题,William,虽然我的答案不正确,但我只是想分享我过去遇到的一个问题的解决方案。我想这就是问题所在,日期的早期转换,而不是尝试将其与其他日期字符串进行比较。我已经按照你的方式,在转换日期之前进行比较,结果很有效。非常感谢你,我已经花了很长时间时间到了!
$date = new DateTime("2016-05-02 15:27:15");
$maxDate = new DateTime();
$minDate = new DateTime($maxDate->format());
$minDate->modify('-30 day');
if ($date >= $minDate and $date <= $maxDate)
{ 
 //... 
}