无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4766|回复: 35
打印 上一主题 下一主题

批处理,计算两个日期之间相差的天数

[复制链接]
跳转到指定楼层
1#
发表于 2024-3-12 11:47:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 likeyouli 于 2024-3-12 16:11 编辑
  1. @echo off
  2. set /p "DateA=请输入日期,注意使用yyyymmdd格式:"
  3. set /p "DateB=请输入日期,注意使用yyyymmdd格式:"
  4. call :DateToDays %DateA:~0,4% %DateA:~4,2% %DateA:~6,2% DaysX
  5. call :DateToDays %DateB:~0,4% %DateB:~4,2% %DateB:~6,2% DaysY
  6. if %DaysX% geq %DaysY% (set /a DayZ=DaysX-DaysY) else (set /a DayZ=DaysY-DaysX)
  7. echo %DateA%和%DateB%间隔的天数是:%DayZ%
  8. goto :eof

  9. :DateToDays %yy% %mm% %dd% days
  10. setlocal ENABLEEXTENSIONS
  11. set yy=%1&set mm=%2&set dd=%3
  12. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  13. set /a dd=100%dd%%%100,mm=100%mm%%%100
  14. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  15. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  16. endlocal&set %4=%j%&goto :EOF
复制代码
东拼西凑了一段代码,后边的几行实在看不懂了,有懂的大神能否解释一下:
set /a dd=100%dd%%%100,mm=100%mm%%%100 这句是什么意思呢 ?尤其100%dd%%%100,%dd%是变量,代表前边第3个参数,即日期的最后两位,紧跟着又加了两个百分号是啥意思呢 ?
还有set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 这句是啥意思呢?中间有什么逻辑呢 ?z/代表啥 ?
还有 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 这句,,最后这几句一直没弄懂啥计算逻辑 ,,



点评

辛苦了  发表于 2024-5-7 17:58

评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 赞一个!

查看全部评分

2#
发表于 2024-3-12 12:07:57 来自手机 | 只看该作者
将第一行删后再观察运行结果
回复

使用道具 举报

3#
发表于 2024-3-12 12:13:45 | 只看该作者
我不晓得  帮顶
回复

使用道具 举报

4#
发表于 2024-3-12 12:16:16 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
发表于 2024-3-12 12:52:47 | 只看该作者
学习一下
回复

使用道具 举报

6#
发表于 2024-3-12 13:16:29 | 只看该作者
xls表格中不是有公式吗?还整那么麻烦的批处理?

点评

excel、sql中都有函数可以直接确定两个日期之差, 批处理我可以不会写,但我希望别人写的批处理我能看懂,能明白每句代码的意思  详情 回复 发表于 2024-3-12 14:05
可能是纯粹为学习  发表于 2024-3-12 13:40
xls 确实方便  发表于 2024-3-12 13:39
回复

使用道具 举报

7#
发表于 2024-3-12 13:53:18 | 只看该作者
感谢分享
回复

使用道具 举报

8#
 楼主| 发表于 2024-3-12 14:05:50 | 只看该作者
zr-71jp 发表于 2024-3-12 13:16
xls表格中不是有公式吗?还整那么麻烦的批处理?

excel、sql中都有函数可以直接确定两个日期之差,
  批处理我可以不会写,但我希望别人写的批处理我能看懂,能明白每句代码的意思

点评

从你的问题看,楼主接触set /a日期差等算法尚早,抖音在职程序要有说,算法是专门的人做的是,他们不一定会编程,大多数程序员都是利用现成的算法,而不是创造算法,所以能用就好,不一定非要看懂每个字符。 %在s  详情 回复 发表于 2024-3-12 14:53
回复

使用道具 举报

9#
发表于 2024-3-12 14:35:52 | 只看该作者
直接利用VBS脚本计算
回复

使用道具 举报

10#
发表于 2024-3-12 14:53:26 来自手机 | 只看该作者
likeyouli 发表于 2024-3-12 14:05
excel、sql中都有函数可以直接确定两个日期之差,
  批处理我可以不会写,但我希望别人写的批处理我能 ...

从你的问题看,楼主接触set /a日期差等算法尚早,抖音在职程序要有说,算法是专门的人做的是,他们不一定会编程,大多数程序员都是利用现成的算法,而不是创造算法,所以能用就好,不一定非要看懂每个字符。

%在set /a里面表示求余运算,cmd默认无法计算小数,也可以用来判断能否整除,%%是用于转义。

set /a a+=1
等同于
set /a a=a+1
其它运算符号亦然。

点评

感谢,, 也就是说,dd=100%dd%%%100 代表100连接变量dd后,再对100取余,比如我输入的日期是20240312的话,%dd%就是12,set /a dd=10012%%100,得到的余数是12,再赋值给dd,,貌似dd根本没有变化啊,难道此步  详情 回复 发表于 2024-3-12 15:16
回复

使用道具 举报

11#
发表于 2024-3-12 15:08:10 | 只看该作者
要了解语法的话,打set/?
要了解算法的话,百度儒略日

点评

谢谢大师 。  详情 回复 发表于 2024-3-12 15:23
回复

使用道具 举报

12#
 楼主| 发表于 2024-3-12 15:16:19 | 只看该作者
本帖最后由 likeyouli 于 2024-3-12 16:06 编辑
nttwqz 发表于 2024-3-12 14:53
从你的问题看,楼主接触set /a日期差等算法尚早,抖音在职程序要有说,算法是专门的人做的是,他们不一定 ...

感谢,,
  也就是说,dd=100%dd%%%100  代表100连接变量dd后,再对100取余,比如我输入的日期是20240312的话,%dd%就是12,set /a dd=10012%%100,得到的余数是12,再赋值给dd,,貌似dd根本没有变化啊,难道此步计算多此一举 ?
.  实测,把这行set /a dd=100%dd%%%100,mm=100%mm%%%100  去掉, 运行结果没啥影响
. ...
我突然又想明白了,这句不能去掉,因为假如输入的日期是20240309,%dd%就是09,但经过set /a dd=100%dd%%%100运算后,%dd%就会变成9,而不是09了

点评

进cmd打set /a 09+1和set /a 9+1就能看到差异了,仔细看set/?能明白。  详情 回复 发表于 2024-3-12 15:26
回复

使用道具 举报

13#
 楼主| 发表于 2024-3-12 15:23:00 | 只看该作者
szwp 发表于 2024-3-12 15:08
要了解语法的话,打set/?
要了解算法的话,百度儒略日

谢谢大师 。
回复

使用道具 举报

14#
发表于 2024-3-12 15:26:56 | 只看该作者
likeyouli 发表于 2024-3-12 15:16
感谢,,
  也就是说,dd=100%dd%%%100  代表100连接变量dd后,再对100取余,比如我输入的日期是2024031 ...

进cmd打set /a 09+1和set /a 9+1就能看到差异了,仔细看set/?能明白。
回复

使用道具 举报

15#
发表于 2024-3-12 16:56:28 来自手机 | 只看该作者
1%dd%-100不是更清楚么

点评

说的是,反正%dd%一定是2位数,不管是109-100=9,还是119-100=19,都可以完美的去除9前边的0而不影响%dd%的值。 用%%取余倒显得复杂了  详情 回复 发表于 2024-3-12 17:14
回复

使用道具 举报

16#
 楼主| 发表于 2024-3-12 17:14:12 | 只看该作者
本帖最后由 likeyouli 于 2024-3-12 17:15 编辑
szwp 发表于 2024-3-12 16:56
1%dd%-100不是更清楚么

说的是,反正%dd%一定是2位数,不管是109-100=9,还是119-100=19,都可以完美的去除9前边的0而不影响%dd%的值。
  用100连接%dd%再对100取余倒显得复杂了
回复

使用道具 举报

17#
发表于 2024-3-12 17:17:27 来自手机 | 只看该作者
1%dd%求余也一样

点评

如果是人脑计算的话,我肯定愿意计算1%dd%-100, , 100%dd%%%100给人的感觉先是一蒙,然后才能计算出求余的值。如果不认识%%是求余的,就更白搭了。 不知道批处理解释器认为哪个更简单些  详情 回复 发表于 2024-3-12 17:25
回复

使用道具 举报

18#
 楼主| 发表于 2024-3-12 17:25:50 | 只看该作者
szwp 发表于 2024-3-12 17:17
1%dd%求余也一样

如果是人脑计算的话,我肯定愿意计算1%dd%-100, ,  100%dd%%%100给人的感觉先是一蒙,然后才能计算出求余的值。如果不认识%%是求余的,就更白搭了。
  不知道批处理解释器认为哪个更简单些
回复

使用道具 举报

19#
发表于 2024-3-12 18:05:47 来自手机 | 只看该作者
求差的话没必要都去-2472633

点评

最后两行set /a z=.. j=.. 我就看不懂了,不知道为什么要这样计算  详情 回复 发表于 2024-3-12 18:27
回复

使用道具 举报

20#
 楼主| 发表于 2024-3-12 18:27:46 | 只看该作者
szwp 发表于 2024-3-12 18:05
求差的话没必要都去-2472633

最后两行set /a z=.. j=.. 我就看不懂了,不知道为什么要这样计算

点评

百度儒略日公式  详情 回复 发表于 2024-3-12 18:36
回复

使用道具 举报

21#
发表于 2024-3-12 18:34:47 | 只看该作者
对批处理感兴趣的可以去批处理的论坛去系统的学习。
从最基础的学起来。

这样笼统的冷不丁的来问和回答,都会让人摸不着头脑。
回复

使用道具 举报

22#
发表于 2024-3-12 18:36:41 来自手机 | 只看该作者
likeyouli 发表于 2024-3-12 18:27
最后两行set /a z=.. j=.. 我就看不懂了,不知道为什么要这样计算

百度儒略日公式
回复

使用道具 举报

23#
发表于 2024-3-12 18:50:38 | 只看该作者
用DateDiff.exe这个命令行程序吧,代码会简洁些,见下
  1. DateDiff.exe 2024-03-12 2024-03-10  /D
复制代码
这里可下载
http://bcn.bathome.net/tool/DateDiff.exe

点评

链接不要点击,直接复制到IDM中就可下载。  发表于 2024-3-12 23:33
403 Forbidden openresty  发表于 2024-3-12 19:35
回复

使用道具 举报

24#
发表于 2024-3-12 20:53:12 | 只看该作者
xls表格
回复

使用道具 举报

25#
发表于 2024-3-13 13:18:15 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

26#
发表于 2024-3-15 08:27:16 | 只看该作者
有点意思
回复

使用道具 举报

27#
发表于 2024-3-15 22:22:52 | 只看该作者
感谢分享
回复

使用道具 举报

28#
发表于 2024-3-26 03:21:49 来自手机 | 只看该作者
感谢分享!!!
回复

使用道具 举报

29#
发表于 2024-4-2 21:44:10 | 只看该作者
学习学习,开拓思路,感谢各位大神
回复

使用道具 举报

30#
发表于 2024-4-30 15:44:41 | 只看该作者
用E xcel的函数很快的:
=ditedit(起始日期,终止日期,"D")
原来大家讨论的是用批处理解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-5 02:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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