标题: [日期时间] 批处理计算日期时间差,精确到秒 [打印本页]
作者: foxJL 时间: 2013-9-5 21:21 标题: 批处理计算日期时间差,精确到秒
本帖最后由 foxJL 于 2013-9-6 19:51 编辑
- @echo off
- ::日期时间差 code by foxjl
- set /p date1=输入开始日期(如1984-2-22 5:11:3):
- set /p date2=输入结束日期(如2013-9-18 5:6:31):
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
- for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
- set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
- set /a D=secs/86400,H=(secs%%86400)/3600,M=(secs%%3600)/60,S=secs%%60
- echo.&echo.%date1%与%date2%之间相隔:%D%天%H%时%M%分%S%秒
- pause>nul
复制代码
作者: 522235677 时间: 2013-9-5 22:04
太牛X了,闰年可以计算吗?
作者: foxJL 时间: 2013-9-5 23:15
回复 2# 522235677
可以算闰年
作者: batman 时间: 2013-9-5 23:40
跟风。。。- Dim Date1, Date2, Arr
- Date1 = "2013-9-18 5:6:31"
- Date2 = "1984-2-22 5:11:3"
- Arr = Split("s,n,h", ",")
- Dim Add, YS, Max
- Add = Abs(DateDiff("s", Date1, Date2))
- For i = 0 To UBound(Arr)
- Max = 60
- If Arr(i) = "h" Then Max = 24
- If Add > 0 Then
- YS = Add Mod Max
- Add = Int(Add / Max)
- Execute Arr(i)&"=""" & YS & """"
- Else
- Execute Arr(i)&"=0"
- End If
- Next
- WScript.Echo "相差" & Add & "天" & h & "小时" & n & "分" & s & "秒"
复制代码
作者: terse 时间: 2013-9-6 13:06
本帖最后由 terse 于 2013-9-6 13:08 编辑
1901 到 2099 之间的计算 是否可简化下呢- @echo off
- set date1=1901-1-1 0:0.0
- set date2=2099-12-31 23:59:59
- for %%i in ("%date1%" "%date2%") do (
- for /f "tokens=1-6 delims=/\:-. " %%a in (%%i) do (
- call:jd %%a %%b %%c %%d %%e %%f
- ))
- set /a d+=s/86400,h=(s%%86400)/3600,m=(s%%3600)/60,s%%=60
- echo %date1% 与 %date2% 之间 %d% 天 %h% 时 %m% 分 %s% 秒
- pause&exit
- :jd
- set /a y=%1,m=%2,m=(m+9)%%12+4,y-=M/14
- set /a d=1461*Y/4+153*M/5+%3-n,s=%4*3600+%5*60+%6-s+i,n=d+1,i=86400
复制代码
作者: hnldwhm52 时间: 2014-9-11 12:11
谢谢分享。
作者: pkcc110 时间: 2014-9-26 12:19
顶,不错 !!!!!!!!!!!!!
作者: amwfjhh 时间: 2014-11-7 21:48
数学不好,看到这类计算类问题就头晕...
作者: amwfjhh 时间: 2014-11-7 21:56
楼主接收了毫秒但却不用它来计算,是怕运行结果超出范围出现异常吗?
作者: 朱颜未改 时间: 2015-3-3 17:45
很实用的批处理,感谢分享~
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |