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

post-title

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é.

 

 

icon Subscribe

to Our Newsletter