@echo off
:begin
cls&set /p var=输入要计算的日期(格式为2000-01-01):
if "%var:~4,1%%var:~7,1%"=="--" goto run
cls&echo 输入格式不正确!请返回正确输入。&ping /n 2 127.1>nul&goto begin
:run
set year=%var:~,4%
set /a month=100%var:~5,2%%%100,str=%year%%%4
if %month% gtr 2 (
if %str% equ 0 (
set /a number+=29
) else (
set /a number+=28
)
)
set /a month-=1
if %month% gtr 0 for /l %%i in (1,1,%month%) do call :lp %%i
set /a number+=100%var:~8,2%%%100
cls&echo %var%是%year%年的第%number%天&set number=0
pause>nul&goto begin
:lp
for %%i in (1,3,5,7,8,10) do if %%i equ %1 set /a number+=31
for %%i in (4,6,9,11) do if %%i equ %1 set /a number+=30
@echo off&color 0b
:st
cls
SET/p TT=你想知道多少天前的日期?
if "%tt%" =="" echo 天数不能为空&pause&goto st
echo %tt%|findstr "^[1-9][0-9]*$">nul&&goto ys||echo 天数只能是1-9&pause&goto st
:ys
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
setlocal enabledelayedexpansion
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
SET/a PN1=%p1%%%4
set PN2=28
if %PN1% EQU 0 set pN2=29
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
set yy=%p1%
set m=%p2%
if %m% leq 2 (set/a yy=%yy%-1& set /a m+=12)
set /a w=(%p3%+2*%m%+3*(%m%+1)/5+%yy%+%yy%/4-%yy%/100+%yy%/400)%%7+1
set xq= 一二三四五六日
set xq=星期!xq:~%w%,1!
set p2=0%p2%
set p2=%p2:~-2,2%
set p3=0%p3%
set p3=%p3:~-2,2%
echo 你查询的是%p1%年%p2%月%p3%日 %xq%
pause