中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-25 23:05
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » 求N天前日期的批处理
可打印版本  7,273 / 4
第1楼 namejm 发表于 2007-06-07 21:29
荣誉版主 发帖 1,737 积分 5,226 来自 成都
求N天前日期的批处理
  经常有人询问N天前的日期如何计算,因为牵涉到大月小月、平年闰年的问题,代码将会比较复杂,让人望而却步。

  虽然两年前willsort曾经发出过这样的代码(请参考:(已结)如果在WINDOWS下DOS命令行删除N天以前的文件),尽管思路极其简单:把日期转化为相对数字,做完减法之后,再把相对数字转化为日期,但是,2472632、146097之类的数字来得太过突兀,让人摸不着头脑,说实话,限于水平,我现在都还看得一头雾水。

  现在发三个求N天前日期的批处理( 日期可以带星期,但是,必须以年月日的顺序排列,年份必须是四位,否则会出错),在关键部分都有注释,比willsort的容易懂一点:

  代码1:
  代码2:
  代码3:

[ Last edited by namejm on 2007-6-8 at 11:15 PM ]
第2楼 vkill 发表于 2007-06-07 21:46
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
用 ruby 简单多了,我只是想追求 “用最短的代码最快时间最合适的工具解决”,没有别的意思~

puts Data.today-3

[ Last edited by vkill on 2007-6-7 at 10:28 PM ]
第3楼 HAT 发表于 2007-06-07 21:50
版主 发帖 5,017 积分 9,023
学习
发一个使用VBS计算日期的批处理
第4楼 wwwyangxm 发表于 2008-12-02 09:12
初级用户 发帖 27 积分 27
我想问一下,楼主的第三个方案中set dat=2007-01-02是否为初始时间?昨晚我想了一个方案,不知道是否和楼主的一样?望解答一下,另:楼主的代码我看的不是很明白(方案三)

下面是的我方案:

假设初始时间坐标为1900-01-01 输入时间为date1 (任意时间) ,这样比较容易计算两个时日的差额(天数)tmp1,另外再输入想要查询的在date1前或者后的任意天数tmp2,如果是在date1前N天的,就计算结果为sum=tmp1+tmp2,(tmp2可正或者负,在date1日期后为正,在date1日期前面的为负),这样最后就可以得到一个距离初始时间的时间差额sum,根据1900-01-01为起止时间,计算差额在sum天的日期,应该是比较简单的。

以上的思路可以解决在任意日期的前后N天的日期,起止时间可以根据计算差额多少来设定,以便减少计算量。

由于知识有限,只能提供思路,望大侠们指导下,我的思路不知道是不是和第三个方案一样?说实话,第三个方案我还没完全看明白...
第5楼 sea1112 发表于 2008-12-27 11:06
初级用户 发帖 119 积分 131 来自 gz
::判断当前日期的前一天
::首先直接把天数减1天
::如果出来的是0天就把月减1天,天数是当月的最后一天。
::如果出来的是0月就把年减1年,月数是当年的最后一月。
@echo off&setlocal enabledelayedexpansion
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set /a nd=!dd!-1
::如果象3月1日减一天是0天就...
if !nd!==0 call :dd0
if !mm!==0 call :mm0
set yyyymmdd=!yyyy!-!mm!-!nd!
echo 今天是:%date:~0,10%
echo 昨天是:!yyyymmdd!
pause

:dd0
set /a mm=!mm!-1
for %%a in (1 3 5 7 8 10 12)do set %%add=31
set /a pddd=!yyyy!*10/4
set pd2d=!pddd:~-1,1!
set 2dd=28
if !pd2d!==0 set 2dd=29
for %%b in (4 6 9 11)do set %%bdd=30
set nd=!%mm%dd!
goto :eof
:mm0
set /a yyyy=!yyyy!-1
set mm=12
set nd=31
goto :eof
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023