DOS下用批处理计算N天前的日期或者N天前后的日期

:::::::::::::::::::::::::::::::::::::::::::::::::::
:: DOS下用批处理计算N天前的日期或者N天前后的日期 ::
:: 2k、xp、2003、win7下测试通过                  ::
:: @author zhzhl0                                ::
:: mklv2005#163.com                              ::
:::::::::::::::::::::::::::::::::::::::::::::::::::

@echo off
setlocal enabledelayedexpansion

:begin
cls

rem 判断操作系统
ver | find /i "5.0" > nul && goto 2k || goto xp
:xp
for /f "tokens=1-3 delims=-/. " %%i in ("%date%") do ( 
set /a yy=%%i, mm=%%j, dd=%%k 
) 
goto nornal
:2k
for /f "tokens=2-4 delims=-/. " %%i in ("%date%") do ( 
set /a yy=%%i, mm=%%j, dd=%%k 
)
goto nornal

:nornal
rem echo %yy%-%mm%-%dd%

rem 算出%yy%是否是闰年
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"

rem N天前的日期 正数
rem N天后的日期 负数
echo.
echo 本程序将算出N天前(后)的日期
::set days=-30
set /p days=请输入天数(N天前正数,N天后负数):

rem 计算日期相差的天数
set /a nd=!dd!-!days!
::echo [nd]=%nd%

rem 计算当月的天数
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
set /a num+=1 
if !num! equ !mm! set /a mday=%%i 
)

::echo yy=%yy% mm=%mm% dd=%dd% nd=%nd% mday=%mday% leap=%leap%
::echo.

rem 如果小于等于0则转到xiaoyu块处理
if !nd! leq 0 goto xiaoyu
rem 如果大于当月天数则转到dayu块处理
if !nd! gtr !mday! goto dayu 

set nm=%mm%
goto println

rem 处理日期相差天数大于当月天数的情况
:dayu
set /a nm=!mm!+1
set /a nd=!nd!-!mday!
if !nm! gtr 12 (
set /a yy=!yy!+1
set /a nm-=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
set /a num+=1 
if !num! equ !nm! set /a mday=%%i 
)
set mm=%nm%

::echo yy=%yy% mm=%mm% nd=%nd% mday=%mday% leap=%leap%

if !nd! gtr !mday! goto dayu
goto println

rem 处理日期相差天数小于等于0的情况
:xiaoyu
set /a nm=!mm!-1
if !nm! lss 1 (
set /a yy=!yy!-1
set /a nm+=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
set /a num+=1 
if !num! equ !nm! set /a mday=%%i 
)
set /a nd=!mday!+!nd!
set mm=%nm%

::echo yy=%yy% mm=%mm% nd=%nd% mday=%mday% leap=%leap%

if !nd! leq 0 goto xiaoyu
goto println

:println
set mm=0%nm%
set dd=0%nd%
set mm=%mm:~-2%
set dd=%dd:~-2%
if !days! leq 0 echo 现在日期是:%date%,%days:~1%天后的日期是:%yy%-%mm%-%dd% 
if !days! gtr 0 echo 现在日期是:%date%,%days%天前的日期是:%yy%-%mm%-%dd%

pause > nul

goto begin

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值