无忧启动论坛

标题: 0-3-1 ~ 33301-3-1(不含) 之间的日期推算 [打印本页]

作者: 青青草    时间: 2021-6-24 16:25
标题: 0-3-1 ~ 33301-3-1(不含) 之间的日期推算
这是从网上看到的,0-3-1 ~ 33301-3-1(不含) 之间的日期推算,觉得不错,摘录于此,供把玩。
  1. :date2i <year> <month> <day> <RetVarName>
  2. setlocal&set/a y=%1,m=%2,d=%3
  3. set/a m=(m+9)%%12,y-=m/10,i=365*y+y/4-y/100+y/400+(m*153+2)/5+d-1
  4. endlocal&set %4=%i%&goto:eof
复制代码



作者: 窄口牛    时间: 2021-6-24 17:00
看不懂。
作者: 青青草    时间: 2021-6-24 17:13
窄口牛 发表于 2021-6-24 17:00
看不懂。

可用于计算任意两个日期(0-3-1 ~ 33301-3-1(不含) 之间)的时间差。
作者: plusv    时间: 2021-6-24 18:42
不错用.

算出的结果正确.
作者: 青青草    时间: 2021-6-24 20:06
plusv 发表于 2021-6-24 18:42
不错用.

算出的结果正确.

代码也很简洁。
作者: nttwqz    时间: 2021-6-24 20:52
你分享的这个不过是简单的数学计算,仔细研究研究,好多人都能写,只要数学不太差。

看看下面这个,昨天日期计算,不知道是哪位大神写的,数学学得真好,set运用的出神入化。

  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,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)"
  3. set M=0%M%&set D=0%D%
  4. Echo;%Y%-%M:~-2%-%D:~-2%&pause
复制代码



用到的部分计算:

set /a !0                ::结果:1
set /a !1                ::结果:0
!意思是一元运算,简单的说,就是!非0值为0,!0值为1。
!(M-4),当M=4时,!(M-4)=1,否则等于0。

set /a "0|1"        ::结果:1
set /a "0|0"        ::结果:0
set /a "1|1"        ::结果:1
|意思是或运算,简单的说,就是同时为0时才为0,否则为1。
"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)",由于4、6、9、11月都是30天,这个用于判断是不是其中某月,替代了IF判断。
假设当前6月:
"K=!(6-4)|!(6-6)|!(6-9)|!(6-11)"
"K=!(2)|!(0)|!(-3)|!(-5)"
"K=0|1|0|0"
"K=1"

set /a "0&1"        ::结果:0
set /a "0&0"        ::结果:0
set /a "1&1"        ::结果:1
&意思是与运算,简单的说,就是同时为1时才为1,否则为0。
"(!!(M-2)&!K)*31"
仍然以6月为例:
"(!!(6-2)&!1)*31"
"(!!4&0)*31"
"(!0&0)*31"
"(1&0)*31"
"0*31"
结果:0


感兴趣的可以自己研究计算方法,不过我估计过一段时间你就会忘记的,即使你研究的滚瓜烂熟。
作者: dbjdyy    时间: 2021-6-25 08:33
能算出彩票中奖号码吗
作者: plusv    时间: 2021-6-25 13:07
dbjdyy 发表于 2021-6-25 08:33
能算出彩票中奖号码吗

那 躺平族 就开心了.

作者: 青青草    时间: 2021-6-28 12:56
nttwqz 发表于 2021-6-24 20:52
你分享的这个不过是简单的数学计算,仔细研究研究,好多人都能写,只要数学不太差。

看看下面这个,昨天 ...

计算方法确实别具一格,但
“set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M”
这样截取日期也容易出错。
作者: nianyueriPE    时间: 2021-7-24 19:18
青青草 发表于 2021-6-28 12:56
计算方法确实别具一格,但
“set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M”
...

确实
作者: 青青草    时间: 2021-7-25 10:26
dbjdyy 发表于 2021-6-25 08:33
能算出彩票中奖号码吗

睡吧,看看能不能做个好梦!
作者: 青青草    时间: 2021-7-25 10:27
nianyueriPE 发表于 2021-7-24 19:18
确实


作者: XJMGS    时间: 2021-8-25 12:46
赞&#128077;
作者: 青青草    时间: 2021-8-27 11:05
XJMGS 发表于 2021-8-25 12:46
赞&#128077;






欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3