`
bluenemo
  • 浏览: 179090 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【日期时间】批处理计算上个月最后一天的日期

阅读更多

【方案一】BAT + date.exe(GNU)

@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 "DstDate=%%h"
    )
)
echo,%DstDate%
pause

 

【方案二】BAT + VBS

@echo off
>"%temp%/DateCalculate.vbs" echo strLastDate=DateAdd("d", -DatePart("d", Date), Date)
>>"%temp%/DateCalculate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& Right("0" ^& Day(strLastDate),2)
>>"%temp%/DateCalculate.vbs" echo WScript.Echo strFmtDate
for /f %%a in ('cscript /nologo "%temp%/DateCalculate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
echo,%DstDate%
pause

 

【方案三】BAT

@echo off
setlocal enabledelayedexpansion
rem 假设系统日期格式为yyyy-mm-dd
set "y=%date:~0,4%"
set "m=%date:~5,2%"
set /a "m=1!m!-101, m=m+(^!m)*12"
rem 上月是否2月或小月
set /a "f=^!(m-2), s=^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11)"
rem 今年是否闰年
set /a "leap=^!(y%%4) & ^!^!(y%%100) | ^!(y%%400)"
rem 上月有!d!天
set /a "d=f*(28+leap)+s*30+(^!f&^!s)*31"
set /a "y1=y-^!(m-12)"
set "m=0!m!"
set "m=!m:~-2!"
set "d=0!d!"
set "d=!d:~-2!"
set DstDate=!y1!-!m!-!d!
echo,%DstDate%
pause

 

【方案四】BAT + Ritchie Lawrence 日期函数

@echo off
rem 假设系统日期格式为yyyy-mm-dd
set ThisYear=%date:~0,4%
set ThisMonth=%date:~5,2%
call :DateToDays %ThisYear% %ThisMonth% 01 ThisDays
set /a DstDays=%ThisDays%-1
call :DaysToDate %DstDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
echo,%DstDate%
pause
goto :eof

:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF

:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF

 

分享到:
评论

相关推荐

    批处理计算太阳光高度角

    批处理计算太阳高度角是一种高效地获取特定地理位置在不同日期或时间段内太阳位置的方法,它在农业、建筑、能源和气象等领域有着广泛的应用。太阳高度角是衡量太阳光线与地面垂直线之间的夹角,对光照强度、建筑采光...

    用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

    ### 使用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件 在Windows操作系统中,经常会遇到需要清理系统中的老旧文件来释放磁盘空间或维护系统整洁的情况。本文将详细介绍如何通过批处理命令来实现对指定...

    批处理删除文件

    在给定的场景中,“批处理删除文件”涉及到创建批处理脚本来删除特定时间条件下的文件,例如一个月前或10天前的文件。下面将详细解释如何创建和理解这样的批处理脚本。 首先,我们要了解批处理脚本的基本结构。一个...

    根据日期得出对应的星期

    在这个批处理文件中,我们首先提取了日期的天、月、年部分,然后进行蔡勒公式的计算,并根据结果设置星期几的字符串。 标签中的“date”和“week”表明这个程序专注于处理日期和星期,而“日期”标签可能意味着程序...

    CMD脚本-时间相关

    - 用户可以通过输入一个正整数来指定需要回溯多少天前的日期。 - 脚本内部通过一系列复杂的计算实现了日期的加减运算。 **脚本结构与实现逻辑**: 1. **初始化环境**: - 使用 `@echo off` 关闭命令行中的回显输出...

    bat批处理版*精美日历*源代码+程序

    :: 原创:foxjl 更新:namejm, qzwqzw,foxjl :: 计算农历日期部分思路及算法来自"趣味东" :: 输入的日期格式为:年-月-日(-可以替换为:、/,可以混用) ...:: 08-01-13 增加推算农历日期的功能,会有一天左右误差。

    公历转换农历

    4. **基础数据**:为了准确转换,需要一个包含历史农历数据的基础库,包括每个农历年的月份数量、每个月的天数以及闰月位置等信息。 5. **算法实现**:在编程中,一般会使用查找表或数学公式来实现公历到农历的转换...

    at命令的用法

    将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了 date,将假定为该月的当前日期。 /next:date[,...] 参数用于指定命令在重复出现...

    XP环境下定时关机源码

    "重复日期使用"则意味着用户可以选择在特定的日期,比如每周的特定几天或每月的固定日期,让程序执行定时关机。这需要程序具备处理日期和时间的能力,可能需要用到`DateTime`类或者其他时间日期处理函数,来判断当前...

    OldCmp

    如果你运行OldCmp时只加了-report选项,它会搜索你默认域中所有计算机密码老化日期大于90天的计算机对象,并且把结果生成为一个HTML报告。如果你的域非常大,并且里面有很多计算机账号,这条命令可能得花上一段时间...

    VBS函数大集合

    61. **Hour函数**:返回一天中的小时数,范围为0到23。 62. **If...Then...Else语句**:基于条件执行不同的代码块。 63. **IgnoreCase属性**:在字符串比较中忽略大小写。 这只是VBScript函数和运算符的一小部分...

    DOS命令合集

    9. /next:date[,...]:在重复出现下一天(例如,下个星期四)时,运行指定命令将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的数字)。 10. command:指定要运行的 Windows ...

    定时执行专家-软件使用手册-2024年最新版 - 定时执行专家是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件

    10. **每月**:每月的某一天执行任务。 11. **每年**:每年的某一天执行任务。 12. **Cron表达式**:使用类似于Unix/Linux的Cron表达式来定义复杂的触发规则。 #### 四、高级功能 - **界面化Cron表达式设置**:...

    在windows中at命令的用法

    - **/every:date[,...]**:设定任务在特定日期重复执行,如每周的特定几天或每月的特定日期。 - **/next:date[,...]**:与`/every`类似,但只运行一次,且是在最近的指定日期。 - **command**:要执行的命令、程序或...

    WinRAR_4.0.exe

    令是一个字符串(或单个的字母),命令 RAR 去执行一个相应的操作。开关被用来 改变 RAR 执行操作的方法。其它参数是压缩文件名和被压缩的文件或要从压缩文件 中被解压文件。 列表文件是一个包括处理的文件名的纯...

    delphi 开发经验技巧宝典源码

    0193 获得指定月的最后一天 127 0194 在指定的日期上加上3月 127 0195 实现倒计时功能 128 0196 判断指定年份是否为闰年 129 0197 调用系统设置日期对话框 129 0198 将秒数转化成hh:mm:ss格式 129 0199...

    forfiles用法详解

    `forfiles`是一个非常实用且功能强大的Windows命令行工具,它允许用户对指定路径下的文件进行批量操作。本篇将详细介绍`forfiles`的各种选项及其实用场景,以便用户能够更好地利用这个工具提高工作效率。 #### 基本...

    delphi 开发经验技巧宝典源码06

    0193 获得指定月的最后一天 127 0194 在指定的日期上加上3月 127 0195 实现倒计时功能 128 0196 判断指定年份是否为闰年 129 0197 调用系统设置日期对话框 129 0198 将秒数转化成hh:mm:ss格式 129 0199...

Global site tag (gtag.js) - Google Analytics