有人可以向我解释为什么这段代码:
MsgBox DateSerial(Int(Val(Left("20180618", 4))), Int(Val(Mid("20180618", 3, 2))), Int(Val(Right("20180618", 2))))
返回 6/18/2019 ???
答案 0 :(得分:3)
因为Mid("20180618", 3, 2)
是18
,它在一年中的12个月内溢出,并使年份数增加一个。
显然你的意思是Mid("20180618", 5, 2)
。
巧合的是,Mid("20180618", 5, 2)
和Mid("20180618", 3, 2)
之间的差异恰好是12(月),因此您只看到年份发生了变化而没有别的。
答案 1 :(得分:2)
您的中间值返回了错误的所需数字,请将其用作中间值
Int(Val(Mid("20180618", 5, 2)))
答案 2 :(得分:1)
每当你有很多参数被评估为代码中不同的东西时,试着看看对每个参数的评价是什么。 Debug.Print
是了解它的好方法:
Sub Main()
Debug.Print (Left("20180618", 4))
Debug.Print (Mid("20180618", 3, 2))
Debug.Print (Right("20180618", 2))
End Sub
因此,你会得到:
2018
18
18
从那里可以看到"错误"。如mentioned by @GSerg,当超过12个月作为参数时,年份增加:
Debug.Print DateSerial(2015,13,1)
返回01.01.2016
相同的作品几天:
Debug.Print DateSerial(2015,1,363)
返回29.12.2015