Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Xác định số ngày từ 2 ngày nhập vào
#1
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 sadGiả 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
Chữ ký của haocaocu Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#2
Hình như Access đã hỗ trợ cho ta hàm này rồi:
http://thuthuataccess.com/forum/thread-56.html
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
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
Chữ ký của haocaocu Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn Hạ Vàng , Noname
#4
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
Chữ ký của haocaocu Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn Hạ Vàng , Noname


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Lỗi không tạo file mới bằng định dạng .mdb feeling 4 79 29-11-16, 04:22 PM
Bài mới nhất: feeling
  [Help] Thiết kế form nhập và lưu trữ dữ liệu theo yêu cầu brianhuynh 16 623 20-10-16, 10:54 PM
Bài mới nhất: brianhuynh
  [Help] Nhờ tạo form lưu hóa đơn nhập, hóa đơn xuất, hàng nhập hàng xuất không cần tính tồn laxx_xxal 1 127 22-09-16, 02:35 PM
Bài mới nhất: Nguyen Hoang Diep
  [Help] Nhờ anh em trong diễn đàn giúp mình thiết kế chương trình báo dịch hàng ngày vinhpaint 1 254 21-06-16, 09:15 AM
Bài mới nhất: zinzin8x
  phân quyền chọn lớp và nhập thông tin theo tên đăng nhập honglv157 10 515 18-05-16, 01:29 PM
Bài mới nhất: hungle2006

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ