-
Xác định số ngày từ 2 ngày nhập vào
haocaocu > 15-08-11, 05:22 PM
Mình có làm 1 function như sau :
Ngay360(ByVal Ngaybatdau As Date, ByVal Ngayketthuc As Date, Optional Phuongthuc As Boolean) As Long
quy tắc tính của hàm này như sau Giả sử biến Ngayketthuc là 30/06/2011)
-Nếu Ngaybatdau là ngày cuối cùng của tháng thì giả sử như sau :
vd1 :
Ngaybatdau=28/02/2011 thì tính đến 31/03/2011=30 ngày đến 30/04/2011=60 ngày đến 31/05/2011=90 ngày đến 30/06/2011=120 ngày
sau đó cộng thêm 1 ngày nữa (vì tính hết ngày 20/06/2011)
- Neu Ngaybatdau là ngày bình thường :
vd2:
Ngaybatdau=13/04/2011 thì tính đến 13/05/2011=30 ngày đến 13/06/2011=60 ngày số ngày còn lại bằng 30-13+1=8 ngày
Tổng cộng : 68 ngày
(Thông thường biến Ngayketthuc là ngày cuối của tháng)
Mình viết rồi nhưng nó không bắt được chặt chẽ các trường hợp. Nhờ các ban viết giúp. Cảm ơn
Hàm mình viết :
Trích dẫn:Public Function Ngay360(ByVal Ngaybatdau As Date, ByVal Ngayketthuc As Date, Optional Phuongthuc As Boolean) As Long
Dim lSothang, lNgaybatdau, lNgayketthuc As Long
lNgaybatdau = Day(Ngaybatdau)
lNgayketthuc = Day(Ngayketthuc)
lSothang = DateDiff("M", Ngaybatdau, Ngayketthuc)
'If Ngaycuoicuathang(Ngaybatdau) = True Then
If lNgayketthuc < lNgaybatdau Then
Ngay360 = (lSothang * 30) + (lNgayketthuc - lNgaybatdau) + 2
ElseIf Thanghai(Ngaybatdau) = True Then
Select Case lNgaybatdau
Case 28
Ngay360 = (lSothang * 30) + (lNgayketthuc - lNgaybatdau) - 2
Case 29
Ngay360 = (lSothang * 30) + (lNgayketthuc - lNgaybatdau) - 1
End Select
Else
Ngay360 = (lSothang * 30) + (lNgayketthuc - lNgaybatdau) + 1
End If
End Function -
RE: Xác định số ngày từ 2 ngày nhập vào
Noname > 15-08-11, 09:38 PM
Hình như Access đã hỗ trợ cho ta hàm này rồi:
http://thuthuataccess.com/forum/thread-56.html -
RE: Xác định số ngày từ 2 ngày nhập vào
haocaocu > 16-08-11, 09:59 AM
Hàm datediff mình cũng đã sử dụng để tính số tháng ở trên, nhưng sử dụng nó để tính ngày thì không phù hợp với yêu cầu của mình.Như mình nói ở trên có các trường hợp đặc biệt như sau :
1. Nếu ngày trước là ngày cuối tháng thì tới cuối tháng kế tiếp tính 30 ngày :
VD: Ngày trước 28/02/2011, Ngày sau : 30/06/2011 thì cách tính như sau :
28/02->31/03=30 ngày
31/03->30/04=30 ngày
30/04->31/05=30 ngày
31/05->30/06=30 ngày
để tính đến hết ngày 30/06 ta phải cộng thêm 1 ngày
Như vậy tổng cộng số ngày ở trên là : 121 ngày (nếu tính bằng hàm datediff cho là : 122 ngày)
2. Nếu ngày trước là ngày bình thường trong tháng thì cách tính như sau :
vd: Ngày trước : 13/04/2011, Ngày sau : 30/06/2011 (ngày sau là ngày cuối của mỗi tháng trong năm)
13/04->13/05=30 ngày
13/05->13/06=30 ngày
từ 13/06->30/06=7 ngày (30-13)
để tính đến hết ngày 30/06 ta phải cộng thêm 1 ngày
Như vậy số ngày ở trên là : 68 ngày (nếu tính bằng hàm datediff cho là : 78 ngày)
Nhờ noname xem giúp mình cái. Mình làm nhưng có vài trường hợp nó không đúng ngày.
Thanks
Nhầm.Ngày bình thường nó tính 78 ngày là đúng.Sory -
RE: Xác định số ngày từ 2 ngày nhập vào
haocaocu > 17-08-11, 03:36 PM
Mình đã làm được rồi. Đơn giản như thế này :
Trích dẫn:Public Function Ngay360(ByVal Ngaybatdau As Date, ByVal Ngayketthuc As Date, Optional Phuongthuc As Boolean) As Long
Dim lSothang, lNgaybatdau, lNgayketthuc As Long
lNgaybatdau = Day(Ngaybatdau)
lNgayketthuc = Day(Ngayketthuc)
lSothang = DateDiff("M", Ngaybatdau, Ngayketthuc)
If Ngaycuoicuathang(Ngaybatdau) = True Then
Ngay360 = (lSothang * 30) + 1
Else
Ngay360 = (lSothang * 30) + (lNgayketthuc - lNgaybatdau) + 1
End If
End Function
--------------------------------------------
Public Function Ngaycuoicuathang(dt As Date) As Boolean
If Month(dt) <> Month(DateAdd("d", 1, dt)) Then
Ngaycuoicuathang = True
Else
Ngaycuoicuathang = False
End If
End Function