VBScript生成YYYYMMDD格式两天前日期结果异常如何解决
错误原因
- 两个版本共同问题:硬编码年、月为当前月1号的年月,完全没有处理跨月、跨年的场景,比如10月2日减2天是9月30日,你的代码依旧会取当前月10月作为结果的月份,自然出错。
- 第一版额外问题:
Day(Now) - 2运算优先级错误,且未处理日为1、2时减完为负数的情况,就会出现-1这类异常输出。 - 第二版额外问题:
DateAdd的第三个参数要求传入日期类型,你传的是Day(Now)返回的纯数字,VBScript会将数字识别为1899-12-30之后的天数,计算结果完全不符合预期,才会出现99这类异常输出。
正确实现代码
' 计算两天前的完整日期,自动处理跨月、跨年逻辑 Dim twoDaysAgo twoDaysAgo = DateAdd("d", -2, Date) ' Date返回当前系统日期(不含时间),比Now更适配需求 ' 拼接为YYYYMMDD格式,月、日不足2位自动补前导零 MyDate = Year(twoDaysAgo) & _ Right("0" & Month(twoDaysAgo), 2) & _ Right("0" & Day(twoDaysAgo), 2) MsgBox MyDate WScript.Quit
内容的提问来源于stack exchange,提问作者Edward Sheriff Curtis
相关产品推荐
相关产品推荐

