maidinhdan > 30-06-15, 04:03 PM
Public Function Tinhthamnien(Ngaybatdau As Date, Ngayketthuc As Date) As String
' code by maidinhdan
Dim Sothang As Long
Dim Nam As String
Dim Thang As String
Sothang = DateDiff("m", Ngaybatdau, Ngayketthuc)
Nam = Int((Sothang) / 12)
Thang = (Sothang) Mod 12
Tinhthamnien = Nam & " Nam " & Thang & " tháng."
End Function
Tinhthamnien([txt1],[txt2])
maidinhdan > 23-07-15, 04:20 PM
bvchauthanh > 23-07-15, 05:05 PM
Public Function TinhThamNien(NgayBatDau As Date, NgayKetThuc As Date) As String
On Error Resume Next
Dim SoNgay As Long
Dim SoThang As Long
Dim sNgay As String
Dim sThang As String
Dim sNam As String
Dim k As String
SoNgay = DateDiff("d", NgayBatDau, NgayKetThuc)
SoThang = DateDiff("m", NgayBatDau, NgayKetThuc)
k = ""
sNam = Int(SoThang / 12)
sThang = SoThang Mod 12
sNgay = SoNgay Mod 30
If sNam > 0 Then k = sNam & " nam "
If sThang > 0 Then k = k & sThang & " tháng "
If sNgay > 0 Then k = k & sNgay & " ngày"
TinhThamNien = k
End Function
maidinhdan > 23-07-15, 05:14 PM
(23-07-15, 05:05 PM)bvchauthanh Đã viết: Ai có cách nào khác để cái số ngày phù hợp hơn không? (tức có tháng 29, 30, 31 ngày ấy)
maidinhdan > 23-07-15, 05:26 PM
(23-07-15, 05:05 PM)bvchauthanh Đã viết: Nếu xem 1 tháng có 30 ngày thì code sau đây có thể tính ra ngày (mình xin sửa code của bạn tí nhé)
Mã PHP:Public Function TinhThamNien(NgayBatDau As Date, NgayKetThuc As Date) As String
On Error Resume Next
Dim SoNgay As Long
Dim SoThang As Long
Dim sNgay As String
Dim sThang As String
Dim sNam As String
Dim k As String
SoNgay = DateDiff("d", NgayBatDau, NgayKetThuc)
SoThang = DateDiff("m", NgayBatDau, NgayKetThuc)
k = ""
sNam = Int(SoThang / 12)
sThang = SoThang Mod 12
sNgay = SoNgay Mod 30
If sNam > 0 Then k = sNam & " nam "
If sThang > 0 Then k = k & sThang & " tháng "
If sNgay > 0 Then k = k & sNgay & " ngày"
TinhThamNien = k
End Function
Ai có cách nào khác để cái số ngày phù hợp hơn không? (tức có tháng 29, 30, 31 ngày ấy)
bvchauthanh > 23-07-15, 06:17 PM
sNgay = SoNgay Mod 30
ongke0711 > 23-07-15, 08:17 PM
bvchauthanh > 23-07-15, 10:49 PM
Public Function TinhThamNien(NgayBD As Date, NgayKT As Date) As String
Dim sNgay As Double, sThang As Double, sNam As Double
sThang = 0
sNam = 0
sNgay = DateDiff("d", NgayBD, NgayKT)
If sNgay > 30 Then
sThang = Int(sNgay / 30)
If sThang > 12 Then
sNam = Int(sThang / 12)
sThang = sThang Mod 12
End If
sNgay = sNgay Mod 30
End If
TinhThamNien = IIf(sNam = 0, "", sNam & " nam ") & IIf(sThang = 0, "", sThang & " tháng ") & sNgay & " ngày"
End Function
maidinhdan > 23-07-15, 11:50 PM
(23-07-15, 10:49 PM)bvchauthanh Đã viết: Mình đã sữa lại code mọi người test thử nhé! anh em sửa code lại như sau nhé
Mã PHP:Public Function TinhThamNien(NgayBD As Date, NgayKT As Date) As String
Dim sNgay As Double, sThang As Double, sNam As Double
sThang = 0
sNam = 0
sNgay = DateDiff("d", NgayBD, NgayKT)
If sNgay > 30 Then
sThang = Int(sNgay / 30)
If sThang > 12 Then
sNam = Int(sThang / 12)
sThang = sThang Mod 12
End If
sNgay = sNgay Mod 30
End If
TinhThamNien = IIf(sNam = 0, "", sNam & " nam ") & IIf(sThang = 0, "", sThang & " tháng ") & sNgay & " ngày"
End Function
hoặc down file đính kèm
ongke0711 > 24-07-15, 02:08 AM
Function ThamNien(NgayBatDau As Date, NgayKetThuc As Date)
' Hàm cho ket qua: X nam, Y tháng, Z ngày
' "Tròn tháng": là sô ngày cua NKT >= sô ngày cua NBD hoac NBD va NKT la ngay cuoi cua thang tuong ung.
' Khac phuc hàm cho ket qua sai doi voi truong hop tháng có 28,29,31 ngày.
Dim Nam As Long, Thang As Long, Ngay As Long
Dim NgayXL As Date, NgayCuoiThang1 As Date, NgayCuoiThang2 As Date
' Cat bo phan thoi gian (time) theo sau NgayBatDau, NgayKetThuc
NgayBatDau = Int(NgayBatDau)
NgayKetThuc = Int(NgayKetThuc)
' Kiem tra xem ngày có hop le không?
If NgayBatDau > NgayKetThuc Then
ThamNien = ""
Exit Function
End If
'#Tìm thông sô NAM truoc, den THANG, den NGAY
' Kiem tra xem có cùng Nam giua 2 ngày can tìm thâm niên
If Year(NgayKetThuc) > Year(NgayBatDau) Then
' Neu khác Nam -> Kiem tra xem Tháng có giong nhau không? -> Neu cùng Tháng
' -> Ktra Ngày de xem dã tròn Nam hay chua du Nam. VD: 2014/7/23 và 2015/7/20 => chua du Nam
If Month(NgayKetThuc) = Month(NgayBatDau) Then
If Day(NgayKetThuc) >= Day(NgayBatDau) Then
Nam = DateDiff("yyyy", NgayBatDau, NgayKetThuc)
Else
Nam = DateDiff("yyyy", NgayBatDau, NgayKetThuc) - 1 'Loai bo truong hop chua tròn NAM, hàm DateDiff 'yyyy" vãn cho gtri = 1
End If
' Truong hop nay chac chan da qua tròn NAM
ElseIf Month(NgayKetThuc) > Month(NgayBatDau) Then
Nam = DateDiff("yyyy", NgayBatDau, NgayKetThuc)
' Truong hop nay chua tròn NAM
Else
Nam = DateDiff("yyyy", NgayBatDau, NgayKetThuc) - 1
End If
' Truong hop nay NAM giong nhau -> chac chan chua tròn NAM
Else
Nam = 0
End If
' Tính xem bao nhiêu THÁNG. Chi lay phan Tháng chua tròn NAM (mod 12).
Thang = (DateDiff("m", DateSerial(Year(NgayBatDau), Month(NgayBatDau), 1), _
DateSerial(Year(NgayKetThuc), Month(NgayKetThuc), 1)) + IIf(Day(NgayKetThuc) >= _
Day(NgayBatDau), 0, -1)) Mod 12
' Tính xem bao nhiêu Ngày da qua. Truong hop NKT >= NBD.
If Day(NgayKetThuc) >= Day(NgayBatDau) Then
Ngay = Day(NgayKetThuc) - Day(NgayBatDau)
' Truong hop NKT<NBD -> phai kiem tra ngày cuôi cua Tháng
' NgayCuoiThang1: Ngày cuôi tháng truoc NgayKetThuc
' NgayCuoiThang2: Ngày cuôi cua tháng NgayKetThuc
' NgayXL: Qui ve Tháng truoc cua NKT voi Ngày cua NBD
Else
NgayCuoiThang1 = DateSerial(Year(NgayKetThuc), Month(NgayKetThuc), 0)
NgayCuoiThang2 = DateSerial(Year(NgayKetThuc), Month(NgayKetThuc) + 1, 0)
NgayXL = DateSerial(Year(NgayKetThuc), Month(NgayKetThuc) - 1, Day(NgayBatDau))
If NgayCuoiThang2 = NgayKetThuc Then 'NKT la ngày cuoi thang
If Thang = 11 Then
Thang = 0
Nam = Nam + 1
Else
Thang = Thang + 1
End If
Else
Ngay = DateDiff("d", IIf(NgayXL > NgayCuoiThang1, NgayCuoiThang1, NgayXL), NgayKetThuc)
End If
End If
If Nam >= 1 Then
ThamNien = Nam & " nam, " & Thang & " tháng, " & Ngay & " ngày"
Else
If Thang >= 1 Then
ThamNien = Thang & " tháng, " & Ngay & " ngày"
Else
ThamNien = Ngay & " ngày"
End If
End If
End Function