Laravel tính số ngày làm việc khi có ngày bắt đầu và số ngày phải hoàn thành

6th Jan 2023
Laravel tính số ngày làm việc khi có ngày bắt đầu và số ngày phải hoàn thành
Table of contents

Không biết có ai phải làm một số các dự án liên quan đến cách tích số ngày thực hiện hợp đồng, số ngày thực hiện công việc bla bla các kiểu nhưng mà cho ngày bắt đầu và bỏ qua ngày thứ 7 và chủ nhật để tính ra ngày deadline cuối cùng phải trả kết quả không nhỉ.

Bài toán đặt ra là như thế này

Cho ngày bắt đầu công việc là hôm nay và trong vòng 30 ngày phải hoàn thành nhưng phải trừ ra thứ 7 và Chủ nhật trong khoản thời gian đó.

Nhưng mà vấn đề như thế này, là trong 30 ngày sẽ có 8 ngày thứ 7 và chủ nhật.

Thành ra tổng số ngày phải thực hiện là 38 ngày, nhưng 38 ngày lại chạy tiếp thêm 1 tuần nữa lại phải cộng thêm 2 ngày thứ 7 và chủ nhật của tuần tiếp theo nữa. Nên tổng số ngày anh phải thực hiện được cộng thêm nữa là 40 ngày.

Vậy giờ phải viết phần để tính ra được trong 1 khoản thời gian để lấy ra được ngày deadline phải trả.

Sau một vài lần chỉnh sửa và cuối cùng mình thấy cách này hợp lý với mình và hiện tại chưa thấy có sai sót trong quá trình sử dụng.

Bài toán ở đây là khi có thứ 7 và Chủ nhật. Nhiều bạn sẽ nghĩa ra 1 cách đơn giản là vậy thì có ngày bắt đầu rồi cộng thêm số ngày cần thực hiện vào rồi cộng thêm số ngày thứ 7 và chủ nhật ở trong khoản thời gián đó là ra. Nhưng đời éo như mơ các bạn ạ. Không tin các bạn có thể làm thử. 

Đây là function của mình

function count_day_work($date_start, $number)
{
    $start = \Carbon\Carbon::parse($date_start);
    $days = 0;
    $i = 1;
    do {
        $number--;
        $days++;
        $date = \Carbon\Carbon::parse($start)->addDays($i++);
        if( $date->isWeekend() ) $number++;
    } while($number > 0);
    
    return $days;
}

Rồi trên đây là function của mình để giải bài toán được đắt ra ban đầu. Anh em nào có ý kiến khác, hoặc các viết khác hay hơn có thể commet phía dưới để chúng ta chùng học hỏi nhé.

Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Mỗi kết nối cơ sở dữ liệu được định nghĩa trong một mảng, với tên kết nối là khóa của mảng

Eager Loading là một kỹ thuật tối ưu hóa truy vấn cơ sở dữ liệu trong Laravel, giúp tăng tốc độ truy vấn và giảm số lượng truy vấn cần thiết để lấy dữ liệu liên quan đến một bản ghi.

Để sử dụng Eager Loading với điều kiện trong Laravel, bạn có thể sử dụng phương thức whereHas hoặc orWhereHas trong Eloquent Builder.

E hiểu đơn giản vầy nha. auth() hay Auth trong laravel là những function global hay class, nó cũng chỉ là 1 thôi

Xin chào các bạn, tuần này mình sẽ viết một bài về cách xử lý Real Time(thời gian thực) với Laravel và Pusher