批处理获得任意天前的日期

本文介绍了一个使用批处理脚本计算任意日期N天前具体日期的方法。该脚本能正确处理不同月份及闰年的日期变化,确保计算准确无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@echo off
:: 作者: namejm 出自:cn-dos
:: 求N天前的日期
:: 日期可以带星期,但是,必须以年月日的顺序排列
:: 年份必须是四位,否则会出错
@echo off
:Main
cls
set day=%date%
set days=0
echo.&echo.
echo 当前日期是:%day%
echo.&set /p input= 请指定要追溯的天数:
setlocal enabledelayedexpansion
:: 提取日期
for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
)
set /a sd-=input
if %sd% leq 0 call :count
cls&echo.&echo.
echo 当前日期是:%day%
echo.
set sm=0%sm%
set sd=0%sd%
echo %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
pause>nul
goto Main

:count
set /a sm-=1
if !sm! equ 0 set /a sm=12, sy-=1
call :days
set /a sd+=days
if %sd% leq 0 goto count
goto :eof

:days
:: 获取指定月份的总天数
set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
set /a max=28+leap
for /f "tokens=%sm%" %%i in ("31 %max% 31 30 31 30 31 31 30 31 30 31") do set days=%%i
goto :eof


该批处理可以考虑到例如4月1日前一天是3月31日,而不是4月0日的问题,值得参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值