在系统中比较具有不同日期格式的日期

时间:2016-05-30 13:39:39

标签: excel vba excel-vba

我需要比较两个日期。它们采用文本格式,看起来像30.05.2016,因为它们是从其他程序中提取的。 问题是,在一个系统上,我得到了不同的日期格式(2016年5月30日),而不是另一个(2016年5月30日)。

我想知道我的想法是否正确,如果不是我应该做什么。

首先,我会检查我有哪种格式。 如果(2016年5月30日)我会做

1. Replace "." to "/" 
2. CDate(value)
3. NumberFormat = "General"
4. Comparing date1 < date2

如果(2016年5月30日)我会做

1. DateValue(Replace "." to "/")

2. NumberFormat = "General"

3. Comparing date1 < date2

我仍然在考虑如何编写这段代码,你在这个阶段的帮助会很好。

2 个答案:

答案 0 :(得分:1)

这假设日期实际上是文字格式。第一个 UDF()处理美国式日期:

Public Function IsD1LessThanD2(d1 As String, d2 As String) As Boolean
    ' US Date format
    IsD1LessThanD2 = CDate(Replace(d1, ".", "/")) < CDate(Replace(d2, ".", "/"))
End Function

第二个 UDF()处理欧洲格式:

Public Function IsD1LessThanD2_E(d1 As String, d2 As String) As Boolean
    ' European Date format
    ary1 = Split(d1, ".")
    ary2 = Split(d2, ".")
    d1 = DateValue(ary1(1) & "/" & ary1(0) & "/" & ary1(2))
    d2 = DateValue(ary2(1) & "/" & ary2(0) & "/" & ary2(2))
    IsD1LessThanD2_E = d1 < d2
End Function

enter image description here

答案 1 :(得分:0)

您可以将两个字符串格式化为日期格式

Dim date1, date2 As Date
' string1 in the format 5/30/2016
date1 = Format(string1, "mm/dd/yyyy")
' string2 in the format 30/5/2016
date2 = Format(string2, "dd/mm/yyyy")

然后你可以简单地比较日期。