[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理如何计算某个日期/指定日期的当周/那一周的星期日/星期天/周日是哪天/几号

本帖最后由 pcl_test 于 2016-7-10 22:50 编辑

程序的目的就是输入一个日期,然后算出这个日期所在的那一周的周日是几号。
我大概的写了想,不过好像发现问题是出现后面的日期的加减上。大虾帮我看下是不是哪边要改下,或者是有错误,谢谢!
代码:
@echo off
setlocal enabledelayedexpansion
cls
:main
echo. 请输入需要计算的日期
echo. 格式如:08-07-17表示08年7月17日
set /p input= 请输入:
::获取输入数据,并分离出日期,月,年
set year1=%input:~0,2%
::将年前面加"20"字符为了能让星期计算公式正常计算
set year=20%year1%
set month=%input:~3,2%
set day=%input:~6,2%
::获得当天的日期
set tdy=%date:~4,12%
::计算输入的日期是星期几
set /a w=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%%7
::计算输入的日期所在周的周末的日期
set /a cw=7-w
::将输入的数据整理成日期格式
set inputday=%year%-%month%-%day%
::计算输入日期所在周的周日的日期
set /a outputday=inputday+cw
echo. 您输入的日期所在周的周日是:%outputday%
pause
goto main
乖乖-小乖乖啊!

发现在BAT中计算日期不容易哦
乖乖-小乖乖啊!

TOP

是不是要判断这一天所在的月的天数,然后在自己制作个 月进制的算法?
乖乖-小乖乖啊!

TOP

看看能不能把这个改成函数输入,然后可以调用,基本格式想这样
call dayfind [输入日期] [天数] [计算后的天数]
code:
@echo off
title dayfind
color 1f
if [%1]==[] call :Help
call ate2Day %1 days
set/a days=%days%+%2
call :Day2Date %days% date
echo.
echo -----------结果---------------
echo.
echo 你查询的日期为:%date%
echo ------------------------------
cmd /k

:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  set yy=%%a & set mm=%%b & set dd=%%c
)
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 %2=%j%&goto :EOF

:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+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%-%mm%-%dd%&goto :EOF

:Help
    cls
    echo ________________________________________________                       
    echo 使用方法:%~nx0 [日期] [天数]
    echo.                           
    echo 日期格式:2007-03-31                     
    echo 天数格式:+/-查询的天数                        
    echo 示例:%~nx0 2007-03-31 3 就是查询3天后的日期  
    echo ________________________________________________
    echo.
    cmd /k
乖乖-小乖乖啊!

TOP

是想用vbs写函数,格式为:
call *.vbs [输入日期] [计算的天数] [输出日期]

碍于vbs压根就不懂,能不能帮忙找个合适的函数。
乖乖-小乖乖啊!

TOP

这个问题用纯p来解决确实是费力不讨好,但既然楼主允许创建vbs临时文件来完成,就好办多了。
对vbs我也是一窍不通,但以前见过别人用vbs提取日期、星期,现借来一用。
对vbs进行了两次创建和读取,希望懂vbs的朋友能简化一下。

  • @echo off&setlocal EnableDelayedExpansion
  • echo.&echo  请输入日期:格式  2008-7-12 单数前面可以不需要加0
  • echo.&set /p tian= &cls
  • for %%a in (日 一 二 三 四 五 六) do (
  •    set /a m+=1&set .!m!=%%a
  • )
  • >%tmp%\tmp.vbs echo wscript.echo Weekday(CDate("%tian%")+0)
  • for /f "delims=" %%i in ('cscript /nologo %tmp%\tmp.vbs') do (
  •    set /a n=^(8-%%i^)%%7
  •    echo.&echo  %tian% 是星期!.%%i!
  •    )
  • >%tmp%\tmp.vbs echo wscript.echo dateadd("d",%n%,#%tian%#)
  • for /f "tokens=* delims=" %%i in ('cscript /nologo %tmp%\tmp.vbs') do (
  •    echo.&echo  %%i 是星期日
  • )
  • del/q %tmp%\tmp.vbs
  • pause>nul
                小楼一夜听春雨  2008-07-19  21:22

[ 本帖最后由 随风 于 2008-7-19 22:06 编辑 ]
技术问题请到论坛发帖求助!

TOP

呵呵,纯P实现起来也不复杂,因为有现成的“函数”了,4F已经有提示,呵呵。

TOP

所以我想把4F的那个弄进去哪怕是作为函数调用。但是我要的是一个有反馈数据的,
call *.vbs [输入日期] [计算的天数] [输出日期]
乖乖-小乖乖啊!

TOP

  1. @echo off
  2. title 获取指定日期的当周的星期几是哪天
  3. ::年/月/日或年-月-日
  4. set 日期=2008-7-17
  5. ::1/2/3/4/5/6/7
  6. set 星期=7
  7. for /f %%a in ('mshta VBScript:Execute("CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write DateAdd(""d"",(%星期%-Weekday(CDate(""%日期%""),2)),""%日期%""):close"^)') do echo;%日期%当周的星期%星期%是%%a
  8. pause
复制代码

TOP

返回列表