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,我从Stackoverflow获得了这段代码,并对其进行了轻微更改,以处理今天的日期 我想看看今天是否正好在两个日期之间。但这是行不通的。 我错过了什么 $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 ($pay

我从Stackoverflow获得了这段代码,并对其进行了轻微更改,以处理今天的日期

我想看看今天是否正好在两个日期之间。但这是行不通的。 我错过了什么

$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!";  
}
$paymentDate=日期('d/m/Y');
echo$paymentDate;//回声今天!
$contractDateBegin=日期('d/m/Y','01/01/2001');
$contractDateEnd=日期('d/m/Y','01/01/2015');
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd)
{
回音“在中间”;
}
其他的
{
回声“不行!”;
}

您正在将日期作为字符串进行比较,这将不起作用,因为比较是按字典进行的。这与对文本文件进行排序时的问题相同,其中一行
20
将出现在一行
100
之后,因为内容不被视为数字,而是被视为ASCII码序列。此外,创建的日期都是错误的,因为您使用的是一个字符串格式的字符串,其中需要一个时间戳(第二个参数)

相反,您应该比较
DateTime
对象的时间戳,例如:

 $paymentDate = date_create();
 $contractDateBegin = date_create_from_format('d/m/Y', '01/01/2001');
 $contractDateEnd = date_create_from_format('d/m/Y', '01/01/2015');

您的现有条件将正常工作。

您无法比较日期字符串。使用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=new DateTime();//今天
echo$paymentDate->格式('d/m/Y');//回声今天!
$contractDateBegin=新日期时间('2001-01-01');
$contractDateEnd=新日期时间('2015-01-01');
如果(
$paymentDate->getTimestamp()>$contractDateBegin->getTimestamp()&&
$paymentDate->getTimestamp()<$contractDateEnd->getTimestamp()){
回音“在中间”;
}否则{
回声“不行!”;
}
直接使用

$paymentDate = strtotime(date("d-m-Y"));
$contractDateBegin = strtotime("01-01-2001");
$contractDateEnd = strtotime("01-01-2015");
然后比较就可以了,因为您的01-01-2015适用于strotime手册中规定的PHP的32位日期范围

编辑:使用
=
计算今天的日期

这是代码的正确答案。只需使用php函数

$paymentDate = date('Y-m-d');
$paymentDate=date('Y-m-d', strtotime($paymentDate));
//echo $paymentDate; // echos today! 
$contractDateBegin = date('Y-m-d', strtotime("01/01/2001"));
$contractDateEnd = date('Y-m-d', strtotime("01/01/2012"));
    
if (($paymentDate >= $contractDateBegin) && ($paymentDate <= $contractDateEnd)){
    echo "is between";
}else{
    echo "NO GO!";  
}
$paymentDate=日期('Y-m-d');
$paymentDate=日期('Y-m-d',标准时间($paymentDate));
//echo$paymentDate;//回声今天!
$contractDateBegin=日期('Y-m-d',标准时间('01/01/2001');
$contractDateEnd=日期(Y-m-d),标准时间(2012年1月1日);
如果($paymentDate>=$contractDateBegin)和($paymentDate如果小时数很重要:

$paymentDate = strtotime(date("Y-m-d 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!";  
}    
$paymentDate=strottime(日期(“Y-m-d H:i:s”);
$contractDateBegin=strottime(“2014-01-22 12:42:00”);
$contractDateEnd=strotTime(“2014-01-22 12:50:00”);
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd){
回音“在中间”;
}否则{
回声“不行!”;
}    

基于luttken的回答。我想我应该添加我的扭曲:)

函数dateIsInBeween(\DateTime$from、\DateTime$to、\DateTime$subject)
{
返回$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 DateIsInBeween($contractDateBegin,$contractDateEnd,$paymentDate)“?”介于“:“不可以!”;

另一个解决方案是考虑写入YMD的日期。< /P> 以这种“格式”编写,比较日期非常容易

$paymentDate       = date('Ymd'); // on 4th may 2016, would have been 20160504
$contractBegin     = 20010101;
$contractEnd       = 20160101;
echo ($paymentDate >= $contractBegin && $paymentDate <= $contractEnd) ? "Between" : "Not Between";
$paymentDate=date('Ymd');//2016年5月4日,应该是20160504年
$contractBegin=20010101;
$contractEnd=20160101;

echo($paymentDate>=$contractBegin&&$paymentDate如果您需要动态的括号日期

$todayStr = date('Y-m-d');
$todayObj=date('Y-m-d', strtotime($todayStr));
$currentYrStr =  date('Y');
$DateBegin = date('Y-m-d', strtotime("06/01/$currentYrStr"));
$DateEnd = date('Y-m-d', strtotime("10/01/$currentYrStr"));
if (($todayObj > $contractDateBegin) && ($paymentDate < $contractDateEnd)){
    $period="summer";
}else{
   $period="winter";  
}
$todayStr=date('Y-m-d');
$todayObj=日期('Y-m-d',标准时间($todayStr));
$currentYrStr=日期('Y');
$DateBegin=date('Y-m-d',strottime('06/01/$currentYrStr');
$DATEND=日期('Y-m-d',标准时间('10/01/$CurrentYRST');
如果($todayObj>$contractDateBegin)和($paymentDate<$contractDateEnd)){
$period=“summer”;
}否则{
$period=“冬季”;
}
另一种解决方案(假设您知道日期格式始终是YYYY/MM/DD和前导零)是max()和min()函数。我认为如果所有其他答案都假设yyyy-mm-dd格式,并且如果您希望确保文件夹按日期顺序排序,则这是文件系统中文件夹的常见命名约定,那么这也没关系

正如其他人所说,给定可以比较字符串的数字顺序,不需要strotime()函数

$paymentDate = date('Y-m-d');
$paymentDate=date('Y-m-d', strtotime($paymentDate));
//echo $paymentDate; // echos today! 
$contractDateBegin = date('Y-m-d', strtotime("01/01/2001"));
$contractDateEnd = date('Y-m-d', strtotime("01/01/2012"));
    
if (($paymentDate >= $contractDateBegin) && ($paymentDate <= $contractDateEnd)){
    echo "is between";
}else{
    echo "NO GO!";  
}
示例:

$biggest = max("2018/10/01","2018/10/02");
优点是你可以在里面放更多的日期,而不仅仅是比较两个

$biggest = max("2018/04/10","2019/12/02","2016/03/20");
要确定某个日期是否介于两个日期之间,您可以进行比较 min()和max()的结果


它不适用于任何其他日期格式,但对于该格式,它可以。不需要转换为秒,也不需要日期函数。

上述方法很有用,但它们不是完全证明,因为如果时间介于12:00 AM/PM和01:00 AM/PM之间,它会给出错误。尽管时间介于这两个时间之间,它仍会返回“禁止”。 以下是相同的代码:

$time = '2019-03-27 12:00 PM';

$date_one = $time; 
$date_one = strtotime($date_one);
$date_one = strtotime("+60 minutes", $date_one);
$date_one =  date('Y-m-d h:i A', $date_one);

$date_ten = strtotime($time); 
$date_ten = strtotime("-12 minutes", $date_ten); 
$date_ten = date('Y-m-d h:i A', $date_ten);

$paymentDate='2019-03-27 12:45 AM';

$contractDateBegin = date('Y-m-d h:i A', strtotime($date_ten)); 
$contractDateEnd = date('Y-m-d h:i A', strtotime($date_one));

echo $paymentDate; 
echo "---------------"; 
echo $contractDateBegin; 
echo "---------------"; 
echo $contractDateEnd; 
echo "---------------";

$contractDateEnd='2019-03-27 01:45 AM';

if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)  
{  
 echo "is between";
} 
else
{  
  echo "NO GO!";  
}
$time='2019-03-27 12:00 PM';
$date_one=$time;
$date\u one=strottime($date\u one);
$date\u one=strottime(“+60分钟,$date\u one”);
$date\u one=日期('Y-m-d h:i A',$date\u one);
$date\u ten=strottime($time);
$date\u ten=strottime(“-12分钟,$date\u ten”);
$date\u ten=日期('Y-m-d h:i A',$date\u ten);
$paymentDate='2019-03-27上午12:45';
$contractDateBegin=日期('Y-m-d h:i A',标准时间($date_ten));
$contractDateEnd=日期('Y-m-d h:i A',标准时间($date_one));
echo$paymentDate;
回声“---------”;
echo$contractDateBegin;
回声“---------”;
echo$contractDateEnd;
回声“---------”;
$contractDateEnd='2019-03-27 01:45 AM';
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd)
{  
回音“在中间”;
} 
其他的
{  
回声“不行!”;
}
在这里您将得到输出
“禁止”
,因为
12:45>01:45

要在这段时间内获得正确的输出日期,请确保将
的“AM”
值从
01:00 AM
转换为
12:00 AM
格式
$time = '2019-03-27 12:00 PM';

$date_one = $time; 
$date_one = strtotime($date_one);
$date_one = strtotime("+60 minutes", $date_one);
$date_one =  date('Y-m-d h:i A', $date_one);

$date_ten = strtotime($time); 
$date_ten = strtotime("-12 minutes", $date_ten); 
$date_ten = date('Y-m-d h:i A', $date_ten);

$paymentDate='2019-03-27 12:45 AM';

$contractDateBegin = date('Y-m-d h:i A', strtotime($date_ten)); 
$contractDateEnd = date('Y-m-d h:i A', strtotime($date_one));

echo $paymentDate; 
echo "---------------"; 
echo $contractDateBegin; 
echo "---------------"; 
echo $contractDateEnd; 
echo "---------------";

$contractDateEnd='2019-03-27 01:45 AM';

if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)  
{  
 echo "is between";
} 
else
{  
  echo "NO GO!";  
}
function betweenDates($cmpDate,$startDate,$endDate){ 
   return (date($cmpDate) > date($startDate)) && (date($cmpDate) < date($endDate));
}
function get_format($df) {

    $str = '';
    $str .= ($df->invert == 1) ? ' - ' : '';
    if ($df->y > 0) {
        // years
        $str .= ($df->y > 1) ? $df->y . ' Years ' : $df->y . ' Year ';
    } if ($df->m > 0) {
        // month
        $str .= ($df->m > 1) ? $df->m . ' Months ' : $df->m . ' Month ';
    } if ($df->d > 0) {
        // days
        $str .= ($df->d > 1) ? $df->d . ' Days ' : $df->d . ' Day ';
    } 

    echo $str;
}

$yr=$year;
$dates=$dor;
$myyear='+'.$yr.' years';
$new_date = date('Y-m-d', strtotime($myyear, strtotime($dates)));
$date1 = new DateTime("$new_date");
$date2 = new DateTime("now");
$diff = $date2->diff($date1);
$paymentDate = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$contractDateBegin = mktime(0, 0, 0, 1, 1, 2001); 
$contractDateEnd =  mktime(0, 0, 0, 1, 1, 2012);

if ($paymentDate >= $contractDateBegin && $paymentDate <= $contractDateEnd){
    echo "is between";
}else{
    echo "NO GO!";  
}