标题: [练习]批处理计算上个月最后一天的日期 [打印本页]
作者: Batcher 时间: 2010-3-15 19:35 标题: [练习]批处理计算上个月最后一天的日期
比如,今天是2010-03-15,运行代码之后能够输出上个月月末的日期2010-02-28。
允许使用BAT、VBS、第三方命令行工具。
作者: neorobin 时间: 2010-3-16 01:11
- @echo off & setlocal enabledelayedexpansion
- set "y=%date:~0,4%" & set "m=%date:~5,2%" & set /a "m=1!m!-101, m=m+(^!m)*12"
- set /a "f=^!(m-2), s=^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11)" & rem 上月是否2月或小月
- set /a "leap=^!(y%%4) & ^!^!(y%%100) | ^!(y%%400)" & rem 今年是否闰年
- set /a "d=f*(28+leap)+s*30+(^!f&^!s)*31" & rem 上月有 !d! 天
- set /a "y1=y-^!(m-12)"
- set "m=0!m!" & set "m=!m:~-2!" & set "d=0!d!" & set "d=!d:~-2!"
- echo 上个月月末的日期是 !y1!-!m!-!d!
- pause
复制代码
作者: BatCoder 时间: 2010-3-16 02:36
- @echo off
- rem 调用GNU for Win32的date.exe
- set "gnuDate=C:\test\date.exe"
- for /f %%a in ('%gnuDate% "+%%Y%%m01"') do (
- for /f %%h in ('%gnuDate% -d "%%a 1 days ago" "+%%Y-%%m-%%d"') do (
- set "lastEndDay=%%h"
- )
- )
- echo,%lastEndDay%
复制代码
作者: yangfengoo 时间: 2010-3-16 08:31
- WScript.echo DateAdd("d", -DatePart("d", Date), date)
复制代码
[ 本帖最后由 yangfengoo 于 2010-3-16 08:33 编辑 ]
作者: BatCoder 时间: 2010-3-21 11:23
- @echo off
- >"%temp%\DstDate.vbs" echo strLastDate=DateAdd("d", -DatePart("d", Date), Date)
- >>"%temp%\DstDate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& Right("0" ^& Day(strLastDate),2)
- >>"%temp%\DstDate.vbs" echo WScript.Echo strFmtDate
- for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
- set "lastEndDay=%%a"
- )
- set lastEndDay=%lastEndDay:~0,4%-%lastEndDay:~4,2%-%lastEndDay:~6,2%
- echo,%lastEndDay%
复制代码
作者: BatCoder 时间: 2010-3-21 13:48
- @echo off
- rem 调用Bill Stewart的DateX.exe
- set "xDate=C:\test\DateX.exe"
- rem 假设系统日期格式是yyyy-mm-dd
- set day=%date:~8,2%
- for /f %%a in ('"%xDate%" -o -%day%') do (
- set "lastEndDay=%%a"
- )
- 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 编辑
- @echo off
- 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))"
- echo %m%月%d%日
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |