
批處理日期轉數字數字轉日期日期轉數字思路:每一年的天數累加。 公式:年數 x 365 + 閏年多出的天數 + M月D日的當年天數核心算法同:批處理計算給定日期(年月日)是星期幾http://bbs.bathome.net/thread-57642-1-1.html
這個相對簡單些,直接轉成函數形式了。假設當前歷法不變(假設很重要)!計算是從0001-01-01為第1天開始。set/a nday=(y1/4-y1/100+y1/400)+y1*365+daysnday為天數,y為年,days為月日代表的天數;y1/4-y1/100+y1/400 紅色的為閏年數,即每個閏年比365多出的天數;y1*365 就是粗算的年轉天數。nclick="copycode($('code0'));">復制代碼
- ::日期轉數字函數date2num
- @echo off
- setLocal enableDelayedExpansion
- ::日期變數字 -01-23:737813
- set idate=-01-23
- set fdate=%idate:-=%
- call :date2num fdate nday
- echo 日期 %idate% 對應數字 %nday%
- pause
- goto :eof
- ::====完====
- ::計算日期的天號。參數YYYYMMDD,輸出num
- :date2num formatdate index
- setlocal
- set fdate=!%1!
- set/a y=1%fdate:~,4%-10000,m=1%fdate:~4,2%-100,d=1%fdate:~6,2%-100
- set/a y1=y-1,m3=(m-1)*3
- set/a leap=^!(y%%4)&^!^!(y%%100)|^!(y%%400),T2=28+leap
- set Mdays=+31+T2+31+30+31+30+31+31+30+31+30+31
- set/a days=d!Mdays:~,%m3%!
- set/a nday=y1/4-y1/100+y1/400+y1*365+days
- endlocal&set %2=%nday%
- goto :eof

