计算两个日期之间的天数

时间:2017-07-21 12:22:01

标签: php function

我想做的是计算两个日期之间的日子,不包括周末和我;使用下面的功能完成。但是,只要echo ${VAR/./`date +%m%d%Y`.} 大于$startDate,我就无法获得正确的结果。我尝试使用$endDate和我的股票,并且老实说我不知道​​下一步是什么。

if ($startDate>$endDate)

6 个答案:

答案 0 :(得分:2)

$startTimeStamp = strtotime("2011/07/01");
$endTimeStamp = strtotime("2011/07/17");

$timeDiff = abs($endTimeStamp - $startTimeStamp);

$numberDays = $timeDiff/86400;  // 86400 seconds in one day

// and you might want to convert to integer
$numberDays = intval($numberDays);

OR

function dateDiff($start, $end) {
  $start_ts = strtotime($start);
  $end_ts = strtotime($end);
  $diff = $end_ts - $start_ts;
  return round($diff / 86400);
}
echo dateDiff("2011-02-15", "2012-01-16").'days';

//Get number of days deference between current date and given date.
echo dateDiff("2011-02-15", date('Y-m-d')).'days';  

对于计算天数,不包括使用以下代码

$start = new DateTime('7/17/2017');
$end = new DateTime('7/24/2017');
$oneday = new DateInterval("P1D");
$daysName = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri');
$days = array();
foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day) {
    $day_num = $day->format("N"); /* 'N' number days 1 (mon) to 7 (sun) */
    if($day_num < 6) { /* weekday */

        $days[$day->format("Y-m-d")] = date('D', strtotime($day->format("Y-m-d")));;
    } 
} 
echo "<pre>";
print_r($days);   
echo count($days);

答案 1 :(得分:2)

这将检查开始日期是否小于结束日期。如果是,那么它将显示日期。

<?php

if($days = getWorkingDays("2017-05-01","2018-01-01")){
  echo $days;
}

function getWorkingDays($startDate,$endDate){
  $startDate = strtotime($startDate);
  $endDate = strtotime($endDate);

  if($startDate <= $endDate){
    $datediff = $endDate - $startDate;
    return floor($datediff / (60 * 60 * 24));
  }
  return false;
}
?>
  

输出:245

使用的功能:

  1. strtotime():strtotime()函数将英文文本日期时间解析为Unix时间戳
  2. floor():floor()函数将数字向下舍入到最接近的整数
  3. 编辑-1 :排除周末(周六及周日)后的几天

    //getWorkingDays(start_date, end_date)
    if($days = getWorkingDays("2017-05-01","2018-01-01")){
          echo $days;
    }
    
    function getWorkingDays($startDate,$endDate){
    
      $days = false;
      $startDate = strtotime($startDate);
      $endDate = strtotime($endDate);
    
      if($startDate <= $endDate){
        $datediff = $endDate - $startDate;
        $days = floor($datediff / (60 * 60 * 24)); // Total Nos Of Days
    
        $sundays = intval($days / 7) + (date('N', $startDate) + $days % 7 >= 7); // Total Nos Of Sundays Between Start Date & End Date
        $saturdays = intval($days / 7) + (date('N', $startDate) + $days % 6 >= 6); // Total Nos Of Saturdays Between Start Date & End Date
    
        $days = $days - ($sundays + $saturdays); // Total Nos Of Days Excluding Weekends
      }
      return $days;
    }
    ?>
    

    <强> 来源:

    1. calculate sundays between two dates
    2. intval()函数用于获取变量的整数值。
    3. 请参阅说明date('N', $date) N - 一天的ISO-8601数字表示(周一为1,周日为7)

答案 2 :(得分:1)

有代码脚本可以做到这一点。

<?php

  $now = time(); // or your date as well 
  $your_date = strtotime("2010-01-01");
  $datediff = $now - $your_date;

  echo floor($datediff / (60 * 60 * 24));
?>

 $datetime1 = new DateTime("2010-06-20");

 $datetime2 = new DateTime("2011-06-22");

 $difference = $datetime1->diff($datetime2);

 echo 'Difference: '.$difference->y.' years, ' 
               .$difference->m.' months, ' 
               .$difference->d.' days';

 print_r($difference);

答案 3 :(得分:1)

试试这个

public function datediff($sdate,$edate){

    $diffformat='%a';
    $date1              = date_create($sdate);
    $date2              = date_create($edate);
    $diff12             = date_diff($date2, $date1);
    $days               = $diff12->format($diffformat) + 1;}

答案 4 :(得分:0)

使用date_diff()返回两个DateTime对象之间的差异。

$diff=date_diff($startDate,$endDate);

答案 5 :(得分:0)

编辑:我在评论中注意到你要排除周末日/天(但是你没有在你的帖子中提到这一点!) 您可以添加要从一周中排除的天数

您可以使用DateTime::diff并使用绝对结果选项(始终为正差异)

<?php
function daysBetween2Dates($date1, $date2, $execludedDaysFromWeek = 0)
{
    try{
        $datetime1 = new \DateTime($date1);
        $datetime2 = new \DateTime($date2);
    }catch (\Exception $e){
        return false;
    }
    $interval = $datetime1->diff($datetime2,true);
    $days = $interval->format('%a');
    if($execludedDaysFromWeek < 0 || $execludedDaysFromWeek > 7){
        $execludedDaysFromWeek = 0 ;
    }
    return ceil($days * (7-$execludedDaysFromWeek) / 7);
}

用法示例

// example 1 : without weekend days, start date is the first one
$days = daysBetween2Dates('2016-12-31','2017-12-31');
echo $days;
// example 2 : without weekend days, start date is the second one
$days = daysBetween2Dates('2017-12-31', '2016-12-31');
echo  "<br>\n" .$days;
// example 3 : with weekend days, it returns 6 days for the week
$days = daysBetween2Dates('2017-12-31', '2017-12-24',-1);
echo  "<br>\n" .$days;
exit;

此输出

365
365
6

现场演示(https://eval.in/835862