简体   繁体   English

PHP日期范围检查

[英]PHP Date Range Check

I have 2 date ranges 我有2个日期范围

[contract_start_date] => 2011-10-20 [contract_end_date] => 2011-10-29

and I want to verify if the dates below are in range of the date range above 我想验证下面的日期是否在上述日期范围的范围内

 2011-05-05 and 2011-10-10

the dates given must not in any way exceed the range of the contract 所给出的日期不得超过合同范围

Is there a function for this in PHP ? 在PHP中有这个函数吗?

See:: http://php.net/manual/en/datetime.diff.php 请参阅:: http://php.net/manual/en/datetime.diff.php

$datetime1 = new DateTime('2011-10-20');
$datetime2 = new DateTime('2011-10-29');

//PHP 5.3.0
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

//PHP 5.2.2
var_dump($datetime1 < $datetime2);

$datetime3 = new DateTime('2011-05-05');
$datetime4 = new DateTime('2011-10-10');

if ($datetime3 > $datetime1 && $datetime2 > $datetime1 && $datetime3 < $datetime2 && $datetime2 < $datetime2) {
    //valid range
}//end if
$start = strtorime($contract_start_date);
$end = strtotime($contract_end_date);

$required_start = strtotime("2011-05-05");
$required_end = strtotime("2011-10-10");

if ($end > $required_end or $end < $required_start)
{
  //out of range
}

if ($start < $required_start or $start > $required_end)
{
  //out of range
}

This should give you exactly what you're looking for: 这应该会给你你正在寻找的东西:

 define(CONTRACT_START, "2011-10-20");
 define(CONTRACT_END, "2011-10-29");

 function checkDateRange($dateArray)
 {
    foreach($dateArray as $dateStr)
    {
        $curDate = strtotime($dateStr);
        if($curDate < strtotime(CONTRACT_START) || $curDate > strtotime(CONTRACT_END))
        {
            return false;
        }   
    }   
    return true;
 }   


$dates = array( 0 => "2011-10-02", 1 => "2011-10-25");

if(checkDateRange($dates))
{
    echo "Dates are within range";
}   
else
{
    echo "Dates are NOT within range";
}   

Find below code to get date difference in days, month and year: 查找以下代码以获取日,月和年的日期差异:

<?php
function datediff($date1,$date2,$format='d'){
    $difference = abs(strtotime($date2) - strtotime($date1));
    switch (strtolower($format)){
    case 'd':
        $days = round((($difference/60)/60)/24,0);
        break;
    case 'm':
        $days = round(((($difference/60)/60)/24)/30,0);
        break;
    case 'y':
        $days = round(((($difference/60)/60)/24)/365,0);
        break;
    }
    return $days;
}
//Example
echo datediff('2011-06-1','2010-8-30','D') . ' Days<br />'; 
echo datediff('2011-06-1','2010-8-30','m') . ' Months<br />'; 
echo datediff('2011-06-1','2010-8-30','y') . ' Years<br />';
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM