#navi(機能別)
''前日日付を求める等、日時に関する計算''
#contents
////////////////////////////////////////////////////////////////////////////
*概要 [#ua5a2903]
set /a による数値演算が出来るので、一応、どのような日時計算でも可能である。
ただし、VBSには DateAdd() や DateDiff() といった関数があるので、それらに
頼るのが楽である。
////////////////////////////////////////////////////////////////////////////
*前月・翌月の年月を求める [#yc8cac3f]
月の計算であれば閏年の処理が必要無いのでバッチでも簡単に書ける。

 set YYYYMM=%DATE:~-10,4%%DATE:~-5,2%
 set /a LASTMONTH=YYYYMM-1
 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100
 set /a NEXTMONTH=YYYYMM+1
 if %NEXTMONTH:~-2%==13 set /a NEXTMONTH+=100-12
////////////////////////////////////////////////////////////////////////////
*前日・翌日の年月日を求める [#u7cbad32]
前日の日付を求める。

 set YYYYMMDD=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%
 set/a ANS=YYYYMMDD-1
 if not %ANS:~-2%==00 goto ans
 if %ANS:~4,2%==01 set/a ANS+=-10000+1131&goto ans
 for %%M in (02 04 06 08 09 11) do if %ANS:~4,2%==%%M set/a ANS+=-100+31&goto ans
 if not %ANS:~4,2%==03 set/a ANS+=-100+30&goto ans
 set/a ANS+=-100+28+(!(%ANS:~0,4%%%4)^^!(%ANS:~0,4%%%100)^^!(%ANS:~0,4%%%400))
 :ans

翌日の日付を求める。

 set YYYYMMDD=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%
 set/a ANS=YYYYMMDD+1
 if 1%ANS:~-2% leq 128 goto ans
 if %ANS:~-2%==32 set/a ANS+=100-31&if not %ANS:~4,2%==12 goto ans
 if %ANS:~4,2%==13 set/a ANS+=10000-1200&goto ans
 if %ANS:~4,2%==02 if %ANS:~-2% geq 29 set/a ANS+=2-(!(%ANS:~0,4%%%4)^^!(%ANS:~0,4%%%100)^^!(%ANS:~0,4%%%400))*(31-%ANS:~-2%)
 for %%M in (02 04 06 09 11) do if %ANS:~-4%==%%M31 set/a ANS+=100-30
 :ans
////////////////////////////////////////////////////////////////////////////
*7日前の日付を求める [#n3d7efd4]
VBSを使って計算する。

 echo WScript.Echo DateAdd("d",-7,Date()) > tmp.vbs
 for /f "tokens=1-3 delims=/-" %%A in ('cscript //nologo tmp.vbs') do set ANS=%%A%%B%%C
 del tmp.vbs
////////////////////////////////////////////////////////////////////////////
*1時間前の日付時刻を求める [#g8cf03cf]
VBSを使って計算する。

 echo WScript.Echo DateAdd("h",-1,now()) > tmp.vbs
 for /f "tokens=1-6 delims=/-: " %%A in ('cscript //nologo tmp.vbs') do set ANS=%%A%%B%%C%%D%%E%%F
 del tmp.vbs
////////////////////////////////////////////////////////////////////////////
#navi(機能別)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS