我已经编了一个代码来计算两个日期之间的时差,但我有一个问题,假期仍在计算中.

我想不按节假日计算差额.

以下是我的代码

date_default_timezone_set('Asia/Jakarta');
$start_date  = date_create("2023-08-18 00:00:00");
$end_date = date_create("2023-08-21 00:00:00");
$different  = date_diff( $start_date, $end_date );
$day = $different->d;
$hour = $different->h;
$minute = $different->i;
        
if($hour < 10){
    $this_hour = "0".$hour;
} else {
    $this_hour = $hour;
}
        
if($minute < 10){
    $this_minute = "0".$minute;
} else {
    $this_minute = $minute;
}
        
if($day < 1){
    $result = $this_hour.":".$this_minute;
} elseif($day >= 1) {
    $total_hour = ($day * 24) + $this_hour;
    $result = $total_hour.":".$this_minute;
}

echo $result;
//Outpput is = 72:00

我已经try 了上面的代码,但我希望结果不包括假期.谢谢.

推荐答案

下面是一个例子:

date_default_timezone_set('Asia/Jakarta');
$awal  = date_create("2023-08-18 00:00:00");
$akhir = date_create("2023-08-21 00:00:00");

// Array of holidays
$holidays = array("2023-08-19"); // Example holiday. Add more dates as needed.

$interval = DateInterval::createFromDateString('1 day');
$periods = new DatePeriod($awal, $interval, $akhir);

$holidayHours = 0;
foreach ($periods as $period) {
    if (in_array($period->format('Y-m-d'), $holidays)) {
        $holidayHours += 24; // Exclude 24 hours for each holiday
    }
}

$diff  = date_diff($awal, $akhir);
$hariNya = $diff->d;
$jamNya = $diff->h;
$menitNya = $diff->i;

if($jamNya < 10){
    $jamNya2 = "0".$jamNya;
} else {
    $jamNya2 = $jamNya;
}

if($menitNya < 10){
    $menitNya2 = "0".$menitNya;
} else {
    $menitNya2 = $menitNya;
}

if($hariNya < 1){
    $durasi = $jamNya2.":".$menitNya2;
} elseif($hariNya >= 1) {
    $gg = $hariNya * 24;
    $ff = $gg+$jamNya2 - $holidayHours; // Subtract holiday hours from total
    $durasi = $ff.":".$menitNya2;
}

echo $durasi;

我在本例中添加了这$holidays = array("2023-08-19");.您必须在此数组中添加假期天数.

Php相关问答推荐

CodeIgniter AJAX表格提交中的CSRF token 再生问题

Postgrid Webhook不叫laravel

Woocommerce自定义变体html表仅显示带值的列

使用WooCommerce本机产品短码时不考虑价格筛选(_SHORT CODE)

WooCommerce购物车中仅允许一个可下载产品

PHP中的圆生成器在国际日期变更线上失败

使用WordPress wp_mail()的邮箱标题无效

闭包绑定$This和垃圾收集器

添加登录:需要app.yaml仍然允许所有拥有Google帐户的人访问

将日期数组排序为年->;月

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

如何在 Woocommerce 中自动删除旧的已完成订单

过滤会员计划标题和标签

使用 phpseclib 验证 RSA-PSS

Shopware 6 AuthControllerDecorator已弃用

PHP Symfony 在测试.env文件中将接口自动装配作为构造函数参数,但使用接口的特定类

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

PHP / DOM : 解析 HTML 以提取基于类的数​​据

PHP 中的正则表达式,具有字符范围,但不包括特定字符

Laravel - 关联与设置观察者事件的 ID