VBA Excel - 一起减去两个日期以获得每小时差异

时间:2016-08-26 13:46:39

标签: vba excel-vba date excel

鉴于两个YYYY-MM-DD-HH:从字符串格式化的MM日期,我想得到两个日期之间的小时差。这是我的以下代码:

Dim ds1 As String: ds1 = "March 3, 2015 2:00pm " 
Dim ds2 As String: ds2 = "March 4, 2015 3:00pm " '25 hours difference 

ds1 = Format(ds1, "YYYY-MM-DD-HH:MM") '2015-03-03-14:00
ds2 = Format(ds2, "YYYY-MM-DD-HH:MM") '2015-03-04-15:00

Dim d As Date: d = CDate(ds2) - CDate(ds1) 'gives the 25 hour diffrence

上面的代码在CDate(ds2)和CDate(ds1)上给出了“类型不匹配”错误。由于CDate仅适用于日期而非小时/分钟。

如何获得这两个日期之间的小时差异?

3 个答案:

答案 0 :(得分:2)

时间间隔不是日期,因此您的变量d不应为Date类型。如您所希望的那样,它应该是一种数字数据类型,例如Long

对于小时差异,您可以使用DateDiff功能,为其提供您想要计算差异的单位:

Dim ds1 As String
Dim ds2 As String
Dim d As Long

ds1 = "2015-03-03 14:00"
ds2 = "2015-03-04 15:00"

d = DateDiff("h", CDate(ds1), CDate(ds2))

Debug.Print d ' outputs 25

说明

日期的Format仅在参数可以转换为日期时有效,因此您也可以立即在原始字符串上执行CDate

如果您可以选择格式,则"2015-03-03 14:00"格式具有首选项(日期和时间部分之间没有连字符)。在我的设置中,如果那里有连字符,则转换失败。

答案 1 :(得分:1)

使用DateDiff方法

 Sub test()
   Dim ds1 As String: ds1 = "March 3, 2015 2:00pm "
   Dim ds2 As String: ds2 = "March 4, 2015 3:00pm " '25 hours difference

   ds1 = Format(ds1, "YYYY-MM-DD HH:MM") '2015-03-03-14:00
   ds2 = Format(ds2, "YYYY-MM-DD HH:MM") '2015-03-04-15:00

   Dim d As Date: d = CDate(ds2) - CDate(ds1) 'gives the 25 hour diffrence
   youranswer = DateDiff("h", ds1, ds2)
End Sub

答案 2 :(得分:1)

仅供参考:如果您减去真实日期,则会在几天内返回差异。乘以24(因为一天中有24小时),你可以在几小时内获得差异 e.g;

Print (#03-04-2015 15:00# - #03-03-2015 14:00#) *24返回24.9999999999418