找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33399|回复: 9

[日期时间] 批处理计算日期时间差,精确到秒

[复制链接]
发表于 2013-9-5 21:21:27 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

发表于 2013-9-5 22:04:22 | 显示全部楼层
太牛X了,闰年可以计算吗?
 楼主| 发表于 2013-9-5 23:15:07 | 显示全部楼层
回复 2# 522235677


    可以算闰年
发表于 2013-9-5 23:40:33 | 显示全部楼层
跟风。。。

  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 & "秒"
复制代码
发表于 2013-9-6 13:06:32 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2014-9-11 12:11:11 | 显示全部楼层
谢谢分享。
发表于 2014-9-26 12:19:57 | 显示全部楼层
顶,不错   !!!!!!!!!!!!!
发表于 2014-11-7 21:48:45 | 显示全部楼层
数学不好,看到这类计算类问题就头晕...
发表于 2014-11-7 21:56:43 | 显示全部楼层
楼主接收了毫秒但却不用它来计算,是怕运行结果超出范围出现异常吗?
发表于 2015-3-3 17:45:25 | 显示全部楼层
很实用的批处理,感谢分享~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:28 , Processed in 0.022038 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表