Translate

Thứ Hai, 4 tháng 11, 2013

Tính số ngày Chủ Nhật


Như đề bài, Trong khoảng thời gian giữa 2 mốc khá dài, ta cần đếm bao nhiêu ngày chủ nhật. Đương nhiên không phải giở lịch tháng ra và ngồi đếm! Bài viết trình bày cách tính số ngày chủ nhật giữa 2 mốc.
Tương tự ngày chủ nhật, ta cũng có thể đếm các ngày thứ 7, thứ 6... vv giữa 2 mốc thời gian. Trừ các ngày lễ, tết không cố định (vd Âm lịch) và thay đổi theo từng quốc gia, việc tính các ngày thứ 7 và chủ nhật để biết số ngày làm việc trong khoảng thời gian cũ là bài toán hay được đặt ra ở các cơ quan, doanh nghiệp...

1- Dùng MS Excel: Hy vọng phần mềm Excel khá phổ biến và có cài sẵn trong mỗi máy tính. Bất kể phiên bản.
1a- Tính ngày Chủ nhật

* Giả sử 2 ô A1 và B1 là 2 ô ghi 2 mốc thời gian; A1 ghi thời gian trước, B1 ghi thời gian sau.
* Công thức tính ngày chủ nhật tại ô C1 là: INT((B1 - A1 - WEEKDAY(B1) + 8)/7)

* Trường hợp 2 ô A1 và B1 muốn ghi mốc nào trước sau gì cũng được, công thức tại ô C1 sẽ dài hơn vì phải đặt giả thiết:
= INT((IF(B1>A1,B1 - A1,A1-B1) - WEEKDAY(IF(B1>A1,B1,A1)) + 8)/7)

1b- Tính các ngày khác

* Công thức tính ngày Chủ nhật tại ô C1 sẽ viết khác một chút = INT((B1 - A1 - WEEKDAY(B1-1+1) + 8)/7)
Bạn chú ý có số -1, đó là ngày Chủ nhật. Trường hợp Thứ Hai phải thay bằng -2:
= INT((B1 - A1 - WEEKDAY(B1-2+1) + 8)/7)
Và tương tự: Thứ Ba thay bằng -3, ... cho đến Thứ 7 thay bằng -7
Tại ô C1, tính số ngày Thứ sáu sẽ là: = INT((B1 - A1 - WEEKDAY(B1-6+1) + 8)/7)

* 2 ô A1 và B1, muốn ghi thời gian không kể thứ tự, ô C1 phải dài hơn cho tìm ngày Chủ Nhật:
= INT((IF(B1>A1,B1 - A1,A1-B1) - WEEKDAY(IF(B1>A1,B1-1+1,A1-1+1)) + 8)/7)
và như đã trình bày ở trên, tìm Thứ gì thì thay bằng trừ số ấy, Vd:
Tìm số ngày Thứ Ba: C1 có công thức: = INT((IF(B1>A1,B1 - A1,A1-B1) - WEEKDAY(IF(B1>A1,B1-3+1,A1-3+1)) + 8)/7)
Tìm số ngày Thứ Bảy: C1 có công thức: = INT((IF(B1>A1,B1 - A1,A1-B1) - WEEKDAY(IF(B1>A1,B1-7+1,A1-7+1)) + 8)/7)

2- Code cho những bạn dùng VB6:

Function TinhSoNgayX(ByVal d1 As Date, ByVal d2 As Date, _
Optional ByVal X As Byte = 1) As Integer
' X=1 Chu nhât, X=2 Thu Hai, X=3 Thu Ba... X=7 Thu bay, code: truongphu.
    If d2 > d1 Then
        TinhSoNgayX = CInt((d2 - d1 - Weekday(d2 - X + 1) + 8) \ 7)
    Else
        TinhSoNgayX = CInt((d1 - d2 - Weekday(d1 - X + 1) + 8) \ 7)
    End If
End Function

' Su dung:
Private Sub Command1_Click()
    Dim Z$
    Z = "Sô ngày Thu Bay là: "
    MsgBox Z & TinhSoNgayX(#8/15/2013#, #11/23/2013#, 7)
    Z = "Sô ngày Chu Nhât là: "
    MsgBox Z & TinhSoNgayX(#8/15/2013#, #11/23/2013#)
    ' nêu tính ngày chu nhât thì chi cân ghi 2 môc
End Sub

Không có nhận xét nào:

Đăng nhận xét

Trực tuyến

Mục lục Toàn bộ (theo thứ tự thời gian)

Trực tuyến