由于刚接触P,出于练手的目的,编写了一个日期函数,该P主要通过输入初始日期参数,分析运算加1后返回给返回参数,同时考虑到闰年和几种不同的日期格式,在编写过程中,得到了phai2003网友的支持,再次表示感谢!
第一个版本
@echo off
if "%1"=="" (
echo Usage:%0 [DATE] [returnstr]
exit /b
) else (
if "%2"=="" (
echo Usage:%0 [DATE] [returnstr]
exit /b
)
)
set date=%1
echo %1|find "/"
if not errorlevel 1 (
call :initd %date%
goto :add
) else (
echo %date% |find "-"
if not errorlevel 1 (
call :initd %date%
goto :add
) else (
call :inith %date%
)
)
:add
if %month% LEQ 9 set month=%month:~1%
if %day% LEQ 9 set day=%day:~1%
if %month% GTR 12 (
echo illegal date &exit /b
)
set sday=%day%
call :begin
call :LBM%month% 2>nul
:return
setlocal ENABLEEXTENSIONS
if %day% EQU %sday% (
echo illegal date &exit /b
)
set year=%year: =%
set month=%month: =%
set day=%day: =%
endlocal
if %month% LEQ 9 set month=0%month%
if %day% LEQ 9 set day=0%day%
set %2=%year%%month%%day%
exit /b
setlocal ENABLEEXTENSIONS
:inith
set year=%date:~0,4%
set month=%date:~4,2%
set day=%date:~-2%
goto :EOF
:initd
for /f "tokens=1-3 delims=/- " %%i in ('echo %1') do (
set year=%%i & set month=%%j & set day=%%k
)
goto :EOF
:begin
set second_month_days=28
set /a a=%year%%%4
set /a b=%year%%%100
set /a c=%year%%%3200
set /a d=%year%%%400
if %a% EQU 0 (
if %b% NEQ 0 (
if %c% NEQ 0 (
set second_month_days=29
goto :EOF
)
)
)
if %d% EQU 0 (
if %c% NEQ 0 (
set second_month_days=29
)
)
goto :EOF
:LBM1
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM2
if %day% LSS %second_month_days% (
set /a day+=1
) else (
if %day% EQU %second_month_days% (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM3
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM4
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM5
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM6
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM7
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM8
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM9
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM10
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM11
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM12
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set month=1
set /a year+=1
)
)
goto :EOF
第一个版本
@echo off
if "%1"=="" (
echo Usage:%0 [DATE] [returnstr]
exit /b
) else (
if "%2"=="" (
echo Usage:%0 [DATE] [returnstr]
exit /b
)
)
set date=%1
echo %1|find "/"
if not errorlevel 1 (
call :initd %date%
goto :add
) else (
echo %date% |find "-"
if not errorlevel 1 (
call :initd %date%
goto :add
) else (
call :inith %date%
)
)
:add
if %month% LEQ 9 set month=%month:~1%
if %day% LEQ 9 set day=%day:~1%
if %month% GTR 12 (
echo illegal date &exit /b
)
set sday=%day%
call :begin
call :LBM%month% 2>nul
:return
setlocal ENABLEEXTENSIONS
if %day% EQU %sday% (
echo illegal date &exit /b
)
set year=%year: =%
set month=%month: =%
set day=%day: =%
endlocal
if %month% LEQ 9 set month=0%month%
if %day% LEQ 9 set day=0%day%
set %2=%year%%month%%day%
exit /b
setlocal ENABLEEXTENSIONS
:inith
set year=%date:~0,4%
set month=%date:~4,2%
set day=%date:~-2%
goto :EOF
:initd
for /f "tokens=1-3 delims=/- " %%i in ('echo %1') do (
set year=%%i & set month=%%j & set day=%%k
)
goto :EOF
:begin
set second_month_days=28
set /a a=%year%%%4
set /a b=%year%%%100
set /a c=%year%%%3200
set /a d=%year%%%400
if %a% EQU 0 (
if %b% NEQ 0 (
if %c% NEQ 0 (
set second_month_days=29
goto :EOF
)
)
)
if %d% EQU 0 (
if %c% NEQ 0 (
set second_month_days=29
)
)
goto :EOF
:LBM1
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM2
if %day% LSS %second_month_days% (
set /a day+=1
) else (
if %day% EQU %second_month_days% (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM3
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM4
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM5
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM6
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM7
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM8
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM9
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM10
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM11
if %day% LSS 30 (
set /a day+=1
) else (
if %day% EQU 30 (
set day=1
set /a month+=1
)
)
goto :EOF
:LBM12
if %day% LSS 31 (
set /a day+=1
) else (
if %day% EQU 31 (
set day=1
set month=1
set /a year+=1
)
)
goto :EOF
