[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
要求%date%必须形如2011-01-07。
某个月天数的计算:
  1. @echo off
  2. set/a Y=%date:~0,4%,M=1%date:~5,2%%%100,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","E=!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31"
  3. echo %Y%年%M%月有%E%天
  4. pause
复制代码
上个月的最后一天的获取:
  1. @echo off
  2. set/a M=1%date:~5,2%%%100-1,Y=%date:~0,4%-!M,M+=!M*12,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","E=!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31"
  3. set M=0%M%
  4. echo 今天的日期:%date:~0,10%
  5. echo 上个月的最后一天是:%Y%-%M:~-2%-%E%
  6. pause
复制代码
一天前的日期:
  1. @echo off
  2. set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31)"
  3. set M=0%M%&set D=0%D%
  4. echo 今天的日期:%date:~0,10%
  5. echo 一天前的日期:%Y%-%M:~-2%-%D:~-2%
  6. pause
复制代码
对于以上代码,如果限定年份为1901以前也包括,则可以把 !(Y%%4) 改成!(Y%%4)&!!(Y%%100))|!(Y%%400) 。

[ 本帖最后由 hanyeguxing 于 2011-1-7 18:20 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hucuibai 于 2011-1-7 16:55 发表
哦 看错了  你这个是计算一个月有多少天,我是要取指定日期的时间 比如说20110201 我要取的就是20110131这个值

把月减1,获取上个月的天数,也就是上个月最后一天的日期。

要求%date%必须形如2011-01-07。
换个写法,要求年份为1900以后:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/a Y=%date:~0,4%,M=1%date:~5,2%%%100-1,R=Y%%4
  3. if %M%==0 set/a M=12,Y-=1
  4. set/a M2=M*2-2
  5. set A=312831303130313130313031
  6. set E=!A:~%M2%,2!
  7. if %R%==0 if %M%==2 set E=29
  8. set M=0%M%
  9. echo 今天的日期:%date:~0,10%
  10. echo 上个月的最后一天是:%Y%-%M:~-2%-%E%
  11. pause
复制代码
什么是闰年?
①、普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
③、对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
公元前闰年规则如下:
①、非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
②、整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年

[ 本帖最后由 hanyeguxing 于 2011-1-7 18:10 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表