比较两个日期,但与当前年份

时间:2017-04-30 23:32:59

标签: vba

我有一个日期的单元格:

30/04/1991

我需要与今天的日期进行比较,但是与该单元格的日期和月份相比,但是与当前年份相比较。但它不起作用。

我有以下内容:

MsgBox Format(Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(Now), "dd/mm/yyyy") < Format(Now, "dd/mm/yyyy")

结果是&#34; 30/04/2017&lt; 1月5日/ 2017&#34; 但是msgbox结果是&#34; False&#34;。这是错的,今天的日期是&#34; 01/05 / 2017&#34;

我做错了什么?

3 个答案:

答案 0 :(得分:2)

为避免2月29日出现问题,您只需比较月份和日期:

MsgBox Format(cell, "mmdd") < Format(Now, "mmdd")

<强>更新

DatePart("y", Date)可用于获取一年中的一天:

 MsgBox DatePart("y", cell) < DatePart("y", Now)

 Debug.Print DatePart("y", "2 28")     // 59
 Debug.Print DatePart("y", "2 29 16")  // 60

答案 1 :(得分:1)

我建议使用DateDiff功能。

您可以使用Date代替Now,因为您只需要日期,而不是时间。

如果您使用DateDiff,则可以将2个值保留为Date变量,而不是将DateValue&"/"一起使用,有一个更短更清洁的版本DateSerial(Year(Date), Month(cell.Value), Day(cell.Value))

<强>代码

MsgBox DateDiff("d", DateSerial(Year(Date), Month(cell.Value), Day(cell.Value)), Date) > 1

如果您还想获得这两个日期之间的天数:

MsgBox DateDiff("d", DateSerial(Year(Date), Month(cell.Value), Day(cell.Value)), Date)

答案 2 :(得分:0)

我自己解决了

MsgBox DateValue(Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(Now)) < DateValue(Date)