【问题标题】:Query between two dates exclude weekends and holidays in phpphp中两个日期之间的查询不包括周末和节假日
【发布时间】:2019-10-03 21:12:56
【问题描述】:

正在开发一个小型应用程序,该应用程序在两个设定的日期范围内不包括周末和公共假期。即,如果用户输入 2019-05-01 和 2019-05-10,它将返回不包括周末的范围,如果有任何公共假期,则从结果中排除这些范围。

我从两个变量中得到日期范围和每天的时间,工作时间

$duration = $endTime  - $startTime; 

我如何使用 in_array 来 当我打印 2019-05-01 和 2019-05-09 之间的日期时返回的结果

//date range

Array
(
[2019-05-01] => 09:30:00
[2019-05-02] => 09:30:00
[2019-05-03] => 09:30:00
[2019-05-06] => 09:30:00
[2019-05-07] => 09:30:00
[2019-05-08] => 09:30:00
[2019-05-09] => 09:30:00
)
// public holiadys
Array
(
[0] => 2019-05-08
[1] => 2019-05-09
)

$start = new DateTime('2019-05-01');
$end = new DateTime('2019-05-31');

// getting the day interval https://php.net/manual/en/class.dateinterval.php
$day = new DateInterval("P1D");

//holidays hardcoded for testing, must create database abd select dates from there
$holidays = array('2016-01-01','2016-03-25');


$days = array();
//hours set to 8 hours a daye
$startTime = new DateTime('08:00:00');
$endTime = new DateTime('17:30:00');
$duration = $startTime->diff($endTime); 

$data = $endTime - $startTime;

foreach(new DatePeriod($start, $day, $end->add($day)) as $day => $k) {
    $day_num = $k->format("N");

    $w = $day_num;
    if($w < 6) { //if its wmore than 5 its weekend 

            $days[$k->format("Y-m-d")] = $duration->format("%H:%I:%S");
    }
}

foreach ($holidays as $value) {
    $value = $value;
}
print_r($days);
print_r($holidays);

需要计算这些日期之间的总时间,不包括周末和公共假期

【问题讨论】:

  • 一些合理的代码缩进是个好主意。它可以帮助我们阅读代码,更重要的是它可以帮助您调试代码
  • 注意,感谢编辑

标签: php jquery ajax


【解决方案1】:

你没有说,所以我会假设周末部分正在工作。只需检查$holidays 数组:

foreach(new DatePeriod($start, $day, $end->add($day)) as $k) {
    $dnm = $k->format("N");
    $key = $k->format("Y-m-d")

    if($dnm < 6 && !in_array($key, $holidays)) {
        $days[$key] = $duration->format("%H:%I:%S");
    }
}

【讨论】:

  • 周末部分正在工作,尝试了 in_array 函数但出现了一些错误
  • 可能是我开始了一段时间,当我尝试完成它时,我被拉到另一个项目中,所以我撤消了 in_array 函数,该函数不起作用并给出错误
  • 我有一个数据库,我可以连接到该数据库并在我的页面上提取设置的假期和回显,现在当尝试将 date_from 和 date_to 列数据添加到我的假期循环时,我收到以下错误: ** 警告:mysql_fetch_array() 期望参数 1 是资源,给定字符串** $holidays = array(); $holiresuts = "SELECT * FROM holidays where holiday_name IS NOT NULL"; $result = mysql_query($holiresuts); while ($row = mysql_fetch_array($holiresuts)) { ` // array_push($holidays, $row["date_from"]);` ` $假期[] = $row[$key];`}
  • 首先,停止使用mysql_函数,其次$holiresuts是一个字符串,你要while ($row = mysql_fetch_array($result)
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
相关资源
最近更新 更多