Board logo

標題: 如何比較 民國日期 [打印本頁]

作者: Andy2483    時間: 2023-4-27 14:17     標題: 如何比較 民國日期

各位前輩好,後學請教各位前輩
有什麼方式可以改善兩個民國日期邏輯值與普通認知不同
EX: 99/4/30 應該要小於 100/4/30,可是以下範例邏輯值卻是 False
後學駑鈍
請教各位前輩:後學出了什麼錯誤?怎麼正確比較?

Option Explicit
Sub TEST()
Dim T, T1
T = CDate("99/4/30")
T1 = CDate("100/4/30")
MsgBox T < T1
End Sub

執行結果:
[attach]36239[/attach]
作者: 准提部林    時間: 2023-4-27 16:11

本帖最後由 准提部林 於 2023-4-27 16:12 編輯

民國日期要先轉成西元, 才能比較
方法一:
split分割, 年+1911, 再合併
tr = split("100/1/1","/")
tr(0)= val(tr(0)) + 1911
tt = join(tr, "/")

方法二:
Format("r" & "100/1/1", "yyyy/mm/dd")
但可能有些版本不支持
作者: Andy2483    時間: 2023-4-27 16:41

本帖最後由 Andy2483 於 2023-4-27 16:47 編輯

回復 2# 准提部林


    謝謝前輩指導
瞭解了,學習方案如下,請前輩再指導

Sub TEST()
Dim T, T1
T = Split("99/4/30", "/"): T(0) = Val(T(0)) + 1911: T = CDate(Join(T))
'空白鍵隔開也辨認出來是日期,真神奇
T1 = Split("100/4/30", "/"): T1(0) = Val(T1(0)) + 1911: T1 = CDate(Join(T1))
MsgBox T < T1
End Sub
'執行結果是True

Sub YYY()
MsgBox Format("r" & "100/1/1", "yyyy/mm/dd")
End Sub
'執行結果是 r100/1/1
============================================
補充:
關鍵在+1911

Sub TEST_1()
Dim T, T1
T = "99/4/30": T = (Val(T) + 1911) & Mid(T, InStr(T, "/")): T = CDate(T)
T1 = "100/4/30": T1 = (Val(T1) + 1911) & Mid(T1, InStr(T1, "/")): T1 = CDate(T1)
MsgBox T < T1
作者: shuo1125    時間: 2023-4-27 22:58

回復 2# 准提部林
回復 3# Andy2483
受教了...感謝高手無私的奉獻!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)