PHP |两个日期之间的工作日数
给你两个字符串(dd-mm-yyyy) 代表两个日期,你必须找到给定日期之间存在的所有工作日的数量。(包括两个)
例子:
Input : startDate = "01-01-2018" endDate = "01-03-2018"
Output : Array
(
[Monday] => 9
[Tuesday] => 9
[Wednesday] => 9
[Thursday] => 9
[Friday] => 8
[Saturday] => 8
[Sunday] => 8
)
Input : startDate = "01-01-2018" endDate = "01-01-2018"
Output : Array
(
[Monday] => 1
[Tuesday] => 0
[Wednesday] => 0
[Thursday] => 0
[Friday] => 0
[Saturday] => 0
[Sunday] => 0
)
找出所有工作日数的基本思想非常简单,您必须从开始日期到结束日期进行迭代并增加每天的计数。因此,您可以计算出所需的结果。
在PHP,我们可以使用 date()函数作为date('l', $timestamp)找到特定日期的日期,其中 $timestamp 是strtotime($date)的值。您也可以在$date->modify('+1 day')的帮助下将日期值增加1 。
算法 :
- 将 startDate 和 endDate字符串转换为 Datetime() 对象。
- 在循环中从 startDate 迭代到 endDate:
- 然后找出 startDate 的时间戳。
- 找出 startDate 的当前时间戳的工作日。
- 将特定工作日的值增加 1。
- 将 startDate 的值增加 1。
- 打印包含所有工作日值的数组。
0,
'Tuesday' => 0,
'Wednesday' => 0,
'Thursday' => 0,
'Friday' => 0,
'Saturday' => 0,
'Sunday' => 0);
// change string to date time object
$startDate = new DateTime($startDate);
$endDate = new DateTime($endDate);
// iterate over start to end date
while($startDate <= $endDate ){
// find the timestamp value of start date
$timestamp = strtotime($startDate->format('d-m-Y'));
// find out the day for timestamp and increase particular day
$weekDay = date('l', $timestamp);
$resultDays[$weekDay] = $resultDays[$weekDay] + 1;
// increase startDate by 1
$startDate->modify('+1 day');
}
// print the result
print_r($resultDays);
?>
输出 :
Array
(
[Monday] => 53
[Tuesday] => 53
[Wednesday] => 52
[Thursday] => 52
[Friday] => 52
[Saturday] => 52
[Sunday] => 52
)