Board logo

标题: [练习]批处理计算上个月最后一天的日期 [打印本页]

作者: Batcher    时间: 2010-3-15 19:35     标题: [练习]批处理计算上个月最后一天的日期

比如,今天是2010-03-15,运行代码之后能够输出上个月月末的日期2010-02-28。

允许使用BAT、VBS、第三方命令行工具。
作者: neorobin    时间: 2010-3-16 01:11

  1. @echo off & setlocal enabledelayedexpansion
  2. set "y=%date:~0,4%" & set "m=%date:~5,2%" & set /a "m=1!m!-101, m=m+(^!m)*12"
  3. set /a "f=^!(m-2), s=^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11)" & rem 上月是否2月或小月
  4. set /a "leap=^!(y%%4) & ^!^!(y%%100) | ^!(y%%400)" & rem 今年是否闰年
  5. set /a "d=f*(28+leap)+s*30+(^!f&^!s)*31" & rem 上月有 !d! 天
  6. set /a "y1=y-^!(m-12)"
  7. set "m=0!m!" & set "m=!m:~-2!" & set "d=0!d!" & set "d=!d:~-2!"
  8. echo 上个月月末的日期是 !y1!-!m!-!d!
  9. pause
复制代码

作者: BatCoder    时间: 2010-3-16 02:36

  1. @echo off
  2. rem 调用GNU for Win32的date.exe
  3. set "gnuDate=C:\test\date.exe"
  4. for /f %%a in ('%gnuDate% "+%%Y%%m01"') do (
  5.     for /f %%h in ('%gnuDate% -d "%%a 1 days ago" "+%%Y-%%m-%%d"') do (
  6.         set "lastEndDay=%%h"
  7.     )
  8. )
  9. echo,%lastEndDay%
复制代码

作者: yangfengoo    时间: 2010-3-16 08:31

  1. WScript.echo DateAdd("d", -DatePart("d", Date), date)
复制代码

[ 本帖最后由 yangfengoo 于 2010-3-16 08:33 编辑 ]
作者: BatCoder    时间: 2010-3-21 11:23

  1. @echo off
  2. >"%temp%\DstDate.vbs" echo strLastDate=DateAdd("d", -DatePart("d", Date), Date)
  3. >>"%temp%\DstDate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& Right("0" ^& Day(strLastDate),2)
  4. >>"%temp%\DstDate.vbs" echo WScript.Echo strFmtDate
  5. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  6.     set "lastEndDay=%%a"
  7. )
  8. set lastEndDay=%lastEndDay:~0,4%-%lastEndDay:~4,2%-%lastEndDay:~6,2%
  9. echo,%lastEndDay%
复制代码

作者: BatCoder    时间: 2010-3-21 13:48

  1. @echo off
  2. rem 调用Bill Stewart的DateX.exe
  3. set "xDate=C:\test\DateX.exe"
  4. rem 假设系统日期格式是yyyy-mm-dd
  5. set day=%date:~8,2%
  6. for /f %%a in ('"%xDate%" -o -%day%') do (
  7.     set "lastEndDay=%%a"
  8. )
  9. echo,%lastEndDay%
复制代码

作者: Hello123World    时间: 2011-8-6 16:25

1.判断平润年。
2.设置1-12月最后一天的数值。
3.当前月减去1,再赋值即可。
作者: CrLf    时间: 2011-8-6 21:12

本帖最后由 CrLf 于 2011-8-7 20:17 编辑
  1. @echo off
  2. set /a "m=1%date:~5,2%-101",y=%date:~,4%-!m","m+=!m*12,"d=30+(m-m/8)%%2-!(m-2)*2-!(m-2)*(!(y%%4)&!(!(y%%100))|!(y%%400))"
  3. echo %m%月%d%日
  4. pause
复制代码

作者: hanyeguxing    时间: 2011-8-7 19:34

本帖最后由 hanyeguxing 于 2011-8-7 19:37 编辑

回复 8# CrLf
CrLf 发表于 2011-8-6 21:12



    最好在 d= 的后面加入月份的修正计算 ,m+=!m*12




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2