gpt4 book ai didi

php - 如何计算两个日期之间的工作日数

转载 作者:可可西里 更新时间:2023-11-01 13:41:22 26 4
gpt4 key购买 nike

我们有一个内部开发的基于 PHP 的时间表系统,并且经过多年的发展,但是向用户提供的一条信息是每个项目的剩余工作日数。

目前,我只是将当前日期与项目结束日期之差除以 7 再乘以 5。这已经足够了很长时间,而且对于周一至周五全职工作的员工来说基本足够准确。然而,我们现在有一些员工每周只工作一天。

时间表系统知道哪些员工在哪几天工作,此信息存储在用户类中的字符串中,对于全职员工,该值将是 NNYYYYY(意思是 ssMTWTF).

我可以很容易地使结果更准确,方法是将两个日期之间的差异除以七,然后乘以他们工作的天数,但在进行此更改时,我正在考虑生成更准确的结果计算实际值的方法。

我想到的最简单的方法是在两个日期之间使用一个循环,将星期几与用户的工作模式进行比较,在用户当天工作的日子向计数器添加一个。

考虑到由于时间表上的项目数量和项目一次可能跨越 12 或 18 个月(每次页面加载都需要大量循环),每次页面浏览必须执行此计算平均约 30 次,我想知道在 PHP 中是否有更有效的方法来执行此操作?

最佳答案

这段代码片段可能会有所帮助:

<?php
//get current month for example
$beginday = date("Y-m-01");
$lastday = date("Y-m-t");

$nr_work_days = getWorkingDays($beginday, $lastday);
echo $nr_work_days;

function getWorkingDays($startDate, $endDate)
{
$begin = strtotime($startDate);
$end = strtotime($endDate);
if ($begin > $end) {
echo "startdate is in the future! <br />";

return 0;
} else {
$no_days = 0;
$weekends = 0;
while ($begin <= $end) {
$no_days++; // no of days in the given interval
$what_day = date("N", $begin);
if ($what_day > 5) { // 6 and 7 are weekend days
$weekends++;
};
$begin += 86400; // +1 day
};
$working_days = $no_days - $weekends;

return $working_days;
}
}

另一种解决方案可以是: Get date range between two dates excluding weekends

关于php - 如何计算两个日期之间的工作日数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23444968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com