- 论坛徽章:
- 0
|
你参考一下这个 求N天前日期的批处理
代码1:
- --------------------------------------------------------------------------------
- @echo off
- :: 求N天前的日期
- :: 思路:
- :: 模拟手工运算,用日期数减去天数,差值为负时向高位借1。
- :: 特点:
- :: 代码简洁,容易理解,速度快慢取决于指定的天数大小
- setlocal enabledelayedexpansion
- :Main
- cls
- :: 日期可以带星期,但是,必须以年月日的顺序排列
- :: 年份必须是四位,否则会出错
- set day=%date%
- set days=0
- echo.&echo.
- echo 指定的日期是:%day%
- echo.
- set /p input= 请指定要追溯的天数:
- :: 提取日期
- 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
- set num=0
- set str=31 %max% 31 30 31 30 31 31 30 31 30 31
- for %%i in (%str%) do (
- set /a num+=1
- if %sm% equ !num! set days=%%i&goto :eof
- )
- goto :eof
复制代码
代码2:
- --------------------------------------------------------------------------------
- @echo off
- :: 求N天前的日期
- :: 思路:
- :: 把当前日期转换为天数
- :: 用当前天数减去N天
- :: 把结果再转换为日期
- :: 具体操作是:
- :: 逐年计算天数
- :: 特点:
- :: 代码简洁,容易理解,速度较慢,但是不受指定天数大小的影响
- setlocal enabledelayedexpansion
- :Main
- cls
- :: 日期可以带星期,但是,必须以年月日的顺序排列
- :: 年份必须是四位,否则会出错
- set day=%date%
- set days=0
- echo.&echo.
- echo 指定的日期是:%day%
- echo.
- set /p input= 请指定要追溯的天数:
- rem ========把指定日期转换为天数========
- :: 提取日期
- for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
- set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
- )
- :: 把年份转化为天数
- for /l %%i in (1,1,%sy%) do (
- set /a leap="^!(%%i %% 4) & ^!(^!(%%i %% 100)) | ^!(%%i %% 400)"
- set /a days=days+365+leap
- )
- :: 把月份转化为天数
- set /a num=0, mday=0, max=28+leap
- set str=0 31 %max% 31 30 31 30 31 31 30 31 30
- for %%i in (%str%) do (
- set /a num+=1
- if !num! leq !sm! set /a mday+=%%i
- )
- set /a days=days+mday+sd
- set /a days-=input
- rem ========把天数转换为日期========
- :: 获取年份
- for /l %%i in (1,1,%sy%) do (
- set /a leap="^!(%%i %% 4) & ^!(^!(%%i %% 100)) | ^!(%%i %% 400)"
- set /a days_tmp=365+leap
- if !days! gtr !days_tmp! (
- set /a days-=days_tmp
- set y=%%i
- )
- )
- :: 获取月份及日期
- set /a m=1, max=28+%leap%
- set str=31 %max% 31 30 31 30 31 31 30 31 30
- for %%i in (%str%) do (
- if !days! gtr %%i (
- set /a days-=%%i
- set /a m+=1
- ) else goto next
- )
- :next
- set m=0%m%
- set d=0%days%
- cls
- echo.&echo.
- echo 指定的日期是:%day%
- echo.
- echo %input% 天前的日期是:%y%-%m:~-2%-%d:~-2%
- pause>nul
- goto Main
复制代码
代码3:
[ 本帖最后由 wangdonsy 于 2009-2-25 20:03 编辑 ] |
|