php - 具有相同日期的 Datediff 之和

标签 php mysql sql

我正在尝试总结日期差异,一切都很好,除了如果有相同日期我想添加 1,例如,如果起始日期是:01/01/2003 到目前为止是 01/01/2003 那么我想添加 1 天,但它没有添加 1 天,而是仅在 01/01/03 到 01/02/2003 之间添加一天。这是计算休假的,如果有人请假一天,即01/01/2003到01/01/2003,则应计算1天

	$sql = "SELECT l.id as typeid,l.*,ud.firstname, ud.lastname,ud.email,l.leave_starting_from,l.leave_partial_from,ud.joining_date, l.typename, l.no_of_leave_days,(CASE SUM(datediff(STR_TO_DATE(lr.to_date, '%m/%d/%Y'), STR_TO_DATE(lr.from_date, '%m/%d/%Y'))) when NULL then '0' else SUM(datediff(STR_TO_DATE(lr.to_date, '%m/%d/%Y'), STR_TO_DATE(lr.from_date, '%m/%d/%Y'))) end) as days_in_betw,  lr.from_date, lr.to_date FROM pr_users u INNER JOIN pr_users_details ud on ud.userid= u.id LEFT OUTER JOIN pr_leave_type l ON ((FIND_IN_SET( u.departmentid , l.function ) >0) AND (FIND_IN_SET( ud.designation_id , l.level ) >0) and (l.gender='All' or l.gender=ud.gender)) LEFT OUTER JOIN pr_leave_request lr ON u.id = lr.userid and lr.sr_type = l.id";

特别是else部分

SUM(datediff(STR_TO_DATE(lr.to_date, '%m/%d/%Y'), STR_TO_DATE(lr.from_date, '%m/%d/%Y'))

最佳答案

我也遇到过同样的问题,希望这个功能能解决你的问题。

function days_calculation($start_date,$end_date){
  $start = new DateTime($start_date);
  $end = new DateTime($end_date);
  // otherwise the  end date is excluded (bug?)
  $end->modify('+1 day');

  $interval = $end->diff($start);

  // total days
  $days = $interval->days;

  // create an iterateable period of date (P1D equates to 1 day)
  $period = new DatePeriod($start, new DateInterval('P1D'), $end);

  // best stored as array, so you can add more than one
  $holidays = array();

  foreach($period as $dt) {
      $curr = $dt->format('D');

      // substract if Saturday or Sunday
      if ($curr == 'Sat' || $curr == 'Sun') {
          $days--;
      }

      // (optional) for the updated question
      elseif (in_array($dt->format('Y-m-d'), $holidays)) {
          $days--;
      }
  }

  if($days==1){
      $days = $days." day";
  } else {
      $days = $days." days";

  }

  return $days;
}

关于php - 具有相同日期的 Datediff 之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48560303/

相关文章:

mysql - CSV 将数据加载到 mySQL 中,其中包含不匹配和跳过的列

html - 如何在 MySQL 函数中将 SQL 选择查询转换为格式化的 HTML 表

mysql - 如何在一个 SQL 查询中获取某一列的多个计数?

java - 存储过程中的分页策略(查看或?)

MySQL 8.0 ST_CONTAINS 返回多边形外的记录,并错过多边形内的记录

php - 尝试打印或回显数组中的数组

php - 在一个范围内生成唯一的随机数

php - 将 session 变量插入 MySQL

mysql - 为什么第二次运行 select 查询后返回 NULL

php - 在 While 循环中的表中拆分 ID