【发布时间】:2021-09-24 00:14:59
【问题描述】:
我正在尝试以周为单位计算日期差异。我实际上想要一个最接近小数点后 10 位 (0.0) 的答案。计算正在截断或舍入我的结果。如何获得更准确的答案?代码如下
Option Explicit
Sub DateTesting()
Dim Date1 As Date
Dim Date2 As Date
Dim DaysDiffer As Long
Dim WeeksDiffer As Long
Date1 = "1/10/2021"
Date2 = "7/14/2021"
DaysDiffer = DateDiff("d", Date1, Date2)
MsgBox DaysDiffer
'185 is the result
WeeksDiffer = DaysDiffer / 7
' 185/7= 26.4285
MsgBox WeeksDiffer
' 26 is the result
' Why am I getting a truncated integer value for the calculation of Weeks???
End Sub
【问题讨论】:
-
试试
Dim WeeksDiffer As DoubleDouble data type -
因为日期变量包含日期和时间。小数点右边的数字代表时间。由于您将
WeeksDiffer定义为Long,它会舍入到最接近的整数/长整数值,删除其中的时间部分。 -
另外,
DateDiff返回一个变体 (Long) - docs.microsoft.com/en-us/office/vba/language/reference/… -
取而代之的是获取秒数
SecsDiffer = DateDiff("s", Date1, Date2),然后进行数学运算以获取该值的小数部分。 -
请注意,
"1/10/2021"不是日期,而是字符串(文本)。如果将其放入Date类型的变量中,Excel 会尝试将其转换为数字日期。 Excel 需要确定日期是mm/dd/yyyy还是dd/mm/yyyy,它使用Windows 中设置的日期格式来执行此操作。这意味着不同系统上的结果可能不同。永远不要让 Excel 解释字符串并将它们转换为日期。我建议始终使用DateSerial(year, month, day)创建一个真实的数字日期。