Board logo

标题: [日期时间] 批处理计算日期时间差,精确到秒 [打印本页]

作者: foxJL    时间: 2013-9-5 21:21     标题: 批处理计算日期时间差,精确到秒

本帖最后由 foxJL 于 2013-9-6 19:51 编辑
  1. @echo off
  2. ::日期时间差 code by foxjl
  3. set /p date1=输入开始日期(如1984-2-22 5:11:3):
  4. set /p date2=输入结束日期(如2013-9-18 5:6:31):
  5. 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))
  6. 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))
  7. 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)
  8. set /a D=secs/86400,H=(secs%%86400)/3600,M=(secs%%3600)/60,S=secs%%60
  9. echo.&echo.%date1%与%date2%之间相隔:%D%天%H%时%M%分%S%秒
  10. pause>nul
复制代码

作者: 522235677    时间: 2013-9-5 22:04

太牛X了,闰年可以计算吗?
作者: foxJL    时间: 2013-9-5 23:15

回复 2# 522235677


    可以算闰年
作者: batman    时间: 2013-9-5 23:40

跟风。。。
  1. Dim Date1, Date2, Arr
  2. Date1 = "2013-9-18 5:6:31"
  3. Date2 = "1984-2-22 5:11:3"
  4. Arr = Split("s,n,h", ",")
  5. Dim Add, YS, Max
  6. Add = Abs(DateDiff("s", Date1, Date2))
  7. For i = 0 To UBound(Arr)
  8.   Max = 60
  9.   If Arr(i) = "h" Then Max = 24
  10.   If Add > 0 Then
  11.     YS = Add Mod Max
  12.     Add = Int(Add / Max)
  13.     Execute Arr(i)&"=""" & YS & """"
  14.     Else
  15.     Execute Arr(i)&"=0"
  16.   End If
  17. Next
  18. WScript.Echo "相差" & Add & "天" & h & "小时" & n & "分" & s & "秒"
复制代码

作者: terse    时间: 2013-9-6 13:06

本帖最后由 terse 于 2013-9-6 13:08 编辑

1901 到 2099 之间的计算 是否可简化下呢
  1. @echo off
  2. set date1=1901-1-1 0:0.0
  3. set date2=2099-12-31 23:59:59
  4. for %%i in ("%date1%" "%date2%") do (
  5. for /f "tokens=1-6 delims=/\:-. " %%a in (%%i) do (
  6. call:jd %%a %%b %%c %%d %%e %%f
  7. ))
  8. set /a d+=s/86400,h=(s%%86400)/3600,m=(s%%3600)/60,s%%=60
  9. echo %date1% 与 %date2% 之间 %d% 天 %h% 时 %m% 分 %s% 秒
  10. pause&exit
  11. :jd
  12. set /a y=%1,m=%2,m=(m+9)%%12+4,y-=M/14
  13. 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://bathome.net./) Powered by Discuz! 7.2