📌  相关文章
📜  PHP |两个日期之间的工作日数

📅  最后修改于: 2022-05-13 01:57:40.135000             🧑  作者: Mango

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
)