Board logo

标题: 从日期判断星期 [打印本页]

作者: 26933062     时间: 2007-2-6 03:11    标题: 从日期判断星期

比如20060110 如何通过以上日期判断是星期几?

作者: namejm     时间: 2007-2-6 03:24
  提供一个思路:先确定一个已经知道是星期几的日期,然后计算20060110和那个日期相差多少天,然后用差值来除以7,取余数——问题的关键在于计算两个日期的差值,这又转化为以前那个经典老话题:某一日期的N天前是哪一天?

作者: 26933062     时间: 2007-2-6 05:22
取得n天前的日期我会,但就是不会计算星期 比如今天是20070205 星期一 n天前的日期是20061210 该怎么计算呢? 20070205减20061210 怎么减呢?

作者: everest79     时间: 2007-2-6 08:26
版主说的不错,你首先得有一个参照物,剩下的就是将日期间距转换为10进制的天数并减去7-参照星期,然后再用7除求余

作者: redtek     时间: 2007-2-6 09:23
再来一个另类星期几查询:)
  1. @ echo off && setlocal
  2. :: Redtek.2006 bbs.cn-dos.net 查询某年/月/日是星期几
  3. set /p setDate=请输入要查询的日期:(格式:年-月-日)
  4. :: 备份当前日期并设置新日期
  5. for /f %%i in ('date/t') do set "当天日期备份=%%i"
  6. echo %setDate%|date >nul
  7. :: 显示查询日期并恢复当前日期为备份日期
  8. echo. && echo 您要查询的日期详细信息为: [ %date% ] && echo.
  9. echo %当天日期备份%|date >nul
  10. Pause
Redtek@sweetmeet.com发表于: 2007-02-05 20:26
注: 如果是服务器等与日期相连紧密的计算机请勿使用此代码。    因实现原理是先备份当前日期,再设置指定日期,利用系统%date%得到星期几,然后再还原计算前的日期。    在计算机上安装了有些对日期敏感的程序,如:进行Java开发的 JCreator pro 等敏感软件,如果日期被更改为过去时,就是再改回来其已经作废。

作者: anqing     时间: 2007-2-6 09:38
楼上兄,一个字,“赞”

作者: zh159     时间: 2007-2-6 14:39
利用刚学会的VBS
@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set /p input=  请输入日期(格式: 2007/1/1): 
if not defined input exit
echo.
>tmp.vbs echo wscript.echo weekday(#%input%#)
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo   星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop
加上一个根据 9 楼修改的:
@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set /p input=  请输入日期(格式: 20070101): 
if not defined input exit
echo.
>tmp.vbs echo wscript.echo Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%"))
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo   星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop
[ Last edited by zh159 on 2007-2-6 at 03:07 PM ]

作者: 26933062     时间: 2007-2-6 16:29
5楼的方法确实不错,不过要更改系统时间,似觉总有点不够完美,各位还有什么高招吗?

作者: 112183883     时间: 2007-2-6 17:55
何不用VBS呢?
<script language="vbscript">
<!--
MsgBox Weekday(CDate("2006-01-10")-1)
-->
</script>

作者: NaturalJ0     时间: 2007-2-6 21:16
记得小时候奥数有个公式的,可以再查下。

作者: 26933062     时间: 2007-2-8 16:40
取得两个日期的差已经解决,现在的问题是怎么判断星期? //比如 已知2007/02/08/星期四 如何确定 18天前的星期呢? 就是如何将当前星期减1或2..........? [ Last edited by 26933062 on 2007-2-8 at 03:47 AM ]

作者: anqing     时间: 2007-2-8 22:01
帮你顶一下,越来越有难度了

作者: zh159     时间: 2007-2-9 05:23
Originally posted by 26933062 at 2007-2-8 03:40: 取得两个日期的差已经解决,现在的问题是怎么判断星期? //比如 已知2007/02/08/星期四 如何确定 18天前的星期呢? 就是如何将当前星期减1或2..........? ...
@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set week=+0
set /p input=  请输入日期(格式: 20070101): 
if not defined input exit
set /p week=  请输入间隔天数(格式: +8(-8),默认为 0): 
echo.
>tmp.vbs echo wscript.echo Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%")%week%)
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo   星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop

作者: slore     时间: 2007-2-9 06:00
MsgBox WeekdayName(Weekday(CDate(Now)))

作者: zh159     时间: 2007-2-9 06:05
借楼上的: MsgBox WeekdayName(Weekday(CDate(Now)-18)) +-天数
@echo off
:loop
cls
echo.
set input=
set week=+0
set /p input=  请输入日期(格式: 20070101): 
if not defined input exit
set /p week=  请输入间隔天数(格式: +8(-8),默认为 0): 
echo.
>tmp.vbs echo wscript.echo WeekdayName(Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%")%week%))
for /f %%i in ('"cscript //nologo tmp.vbs"') do call echo   %%i
del tmp.vbs
echo.
pause
goto loop
[ Last edited by zh159 on 2007-2-8 at 06:42 PM ]

作者: anqing     时间: 2007-2-9 07:16
Originally posted by zh159 at 2007-2-9 06:05: 借楼上的: MsgBox WeekdayName(Weekday(CDate(Now)-18)) +-天数 [code]@echo off :loop cls echo. set input= set week=+0 set /p input= 请输入日期(格式: 200 ...
上面的delims=-这句应该用不上的

作者: zh159     时间: 2007-2-9 07:43
Originally posted by anqing at 2007-2-8 18:16: 上面的delims=-这句应该用不上的
没错,而且"tokens=* delims=-"都可以不用

作者: 26933062     时间: 2007-2-9 14:38
这是我作的通过日期计算天数的批处理,太臃肿了,请高手简化一下,谢谢 @echo off ::通过日期计算天数 set kai=0 set wan=0 set dangq=%date:~0,4% set /p n=请输入要查询的日期 格式(19950110) : set nian=%n:~0,4% set lsyue=%n:~4,2%&set lsri=%n:~6,2% if %n:~4,1% equ 0 set lsyue=%n:~5,1% if %n:~6,1% equ 0 set lsri=%n:~7,1% set dqyue=%date:~5,2%&set dqri=%date:~8,2% if %date:~5,1% equ 0 set dqyue=%date:~6,1% if %date:~8,1% equ 0 set dqri=%date:~9,1% ::得到有几个 er 润年 set er=0 set /a xt=%dangq%/4 set /a xt2=%xt%*4 if %xt2% equ %dangq% ( if %dqyue% gtr 2 set /a er+=1 ) if %nian% equ %dangq% ( if %n:~4,2% equ %date:~5,2% set /a kai=%dqri%-%lsri%&goto ok goto tian ) :1 set /a sr=%nian%/4 set /a yan=%sr%*4 if %yan% equ %nian% set /a er+=1 set /a nian=%nian%+1 if %nian% equ %dangq% goto tian goto 1 :tian if %dqyue% equ 1 set kai=%dqri%&goto lis set kai=31 if %dqyue% equ 2 set /a kai=%kai%+%dqri%&goto lis set /a kai=%kai%+28 set yue=3 set syue=4 :2 if %dqyue% equ %yue% set /a kai=%kai%+%dqri%&goto lis set /a kai=%kai%+31 if %dqyue% equ %syue% set /a kai=%kai%+%dqri%&goto lis set /a kai=%kai%+30 set /a yue+=2&set /a syue+=2&goto 2 :lis if %n:~0,4% equ %dangq% set /a kai=%kai%-%lsri%&goto ok if %lsyue% equ 1 set /a wan=31-%lsri%+334&goto jian if %lsyue% equ 2 set /a wan=28-%lsri%+306&goto jian set lyue=3 set lsyuee=4 set var=5 set num=4 :3 if %lsyue% equ %lyue% set /a wan=31-%lsri%+%var%*31+%num%*30&goto jian set /a num-=1 if %lsyue% equ %lsyuee% set /a wan=30-%lsri%+%var%*31+%num%*30&goto jian set /a var-=1 set /a lyue+=2&set /a lsyuee+=2&goto 3 :jian set niane=%n:~0,4% :4 set /a niane+=1 if %niane% equ %dangq% goto ok set /a wan=%wan%+365&goto 4 :ok set /a ts=%kai%+%er% set /a ts=%ts%+%wan% echo %n:~0,4%-%n:~4,2%-%n:~6,2% 距今天相差 %ts% 天 echo. echo 其中有 %er% 个润年 pause>nul [ Last edited by 26933062 on 2007-2-9 at 01:39 AM ]

作者: zh159     时间: 2007-2-9 14:59
这两天玩的
@echo off
:loop
cls
echo.
set toDate=
set /p toDate=  请输入日期(格式: 20070101): 
if not defined toDate exit
echo.
>tmp.vbs echo wscript.echo datediff("d",#%date:~0,10%#,#%toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2%#)
for /f %%i in ('"cscript //nologo tmp.vbs"') do call echo   %toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2% 距今天相差 %%i 天
del tmp.vbs
echo.
pause
goto loop
[ Last edited by zh159 on 2007-2-9 at 02:00 AM ]

作者: 26933062     时间: 2007-2-10 18:36
谢谢大家的答案 总结综合了大家的方法,终于搞出来了,请大家帮忙看一看,改一改 ::通过日期计算天数并显示星期 ::通过天数计算日期并显示星期 @echo off :loop set xuanz= cls&echo.&echo 按 t 使用天数查询, 按 r 或任意键使用日期查询. echo.&set /p xuanz= 请选择: [t,r]: if "%xuanz%"=="t" goto tgtian cls&echo.&echo 当前日期是 %date%&echo.&set toDate= echo 请输入要查询的日期 格式 (20070101) echo.&echo 若要查询 “当前日期以后” 的日期 请先输入 + 号 如: (+20080102) echo.&set /p toDate= 请输入: if not defined toDate exit if %toDate:~0,1%==+ ( if %toDate:~1,4%-%toDate:~5,2%-%toDate:~7,2% leq %date:~0,10% ( cls&echo.&echo 您输入的是 %toDate% 若要查询当前日期以前的日期,请不要输入 + 号 echo.&echo 您的输入有误,请按任意键重新输入......... pause>nul&goto loop ) ) if not %toDate:~0,1%==+ ( if %toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2% geq %date:~0,10% ( cls&echo.&echo 您输入的是 %toDate% 若要查询当前日期以后的日期,请先输入 + 号 echo.&echo 您的输入有误,请按任意键重新输入......... pause>nul&goto loop ) ) if "%toDate:~0,1%"=="+" goto yihou >tmp.vbs echo wscript.echo datediff("d",#%date:~0,10%#,#%toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2%#) goto yiqian :yihou >tmp.vbs echo wscript.echo datediff("d",#%toDate:~1,4%-%toDate:~5,2%-%toDate:~7,2%#,#%date:~0,10%#) for /f %%i in ('"cscript //nologo tmp.vbs"') do call set ook=%toDate:~1,4%-%toDate:~5,2%-%toDate:~7,2% 距今天相差 %%i 天&set week=%%i goto del_ :yiqian for /f %%i in ('"cscript //nologo tmp.vbs"') do call set ook=%toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2% 距今天相差 %%i 天&set week=%%i :del_ del tmp.vbs goto xinqi ::----------------------------------------------------------------------------------------- ::通过天数得到日期 :tgtian cls&echo.&echo 当前日期是 %date%&echo. echo 查询“当前日期之后”的天数请先输入 + 号,如: +10 表示10天以后的日期: echo.&set /p n= 请输入: if "%n:~0,1%"=="+" set n=-%n% >%tmp%\tmp.vbs echo wscript.echo dateadd("d",-%n%,date) for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do ( set y=%%i set m=%%j set d=%%k ) if %m% LSS 10 set m=0%m% if %d% LSS 10 set d=0%d% set toDate=%y%%m%%d% ::----------------------------------------------------------------------------------------- ::查询星期 :xinqi for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp2=%%n&&call set %%Tmp2:-==%% set week=+0 if "%toDate:~0,1%"=="+" goto yihou2 >tmp.vbs echo wscript.echo Weekday(CDate("%toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2%")%week%) for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call set ok=星期%%week%%i%% goto yiqian2 :yihou2 >tmp.vbs echo wscript.echo Weekday(CDate("%toDate:~1,4%-%toDate:~5,2%-%toDate:~7,2%")%week%) for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call set ok=星期%%week%%i%% :yiqian2 del tmp.vbs if "%xuanz%"=="t" goto xst cls&echo.&echo 今天是 %date% echo. if "%toDate:~0,1%"=="+" ( echo 还要过 %ook:~18% 才是您输入的 %ook:~0,10% %ok% pause>nul&goto loop ) echo 您输入的 %ook:~0,10% %ok% %ook:~11,5% %ook:~18% echo.&pause>nul&goto loop :xst cls&echo.&echo 今天是 %date% echo. if "%n:~0,1%"=="-" ( echo %n:~2% 天以后的日期是 %toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2% %ok% pause>nul&goto loop ) echo %n% 天以前的日期是 %toDate:~0,4%-%toDate:~4,2%-%toDate:~6,2% %ok% pause>nul&goto loop [ Last edited by 26933062 on 2007-2-10 at 06:07 AM ]

作者: ruisoft     时间: 2008-11-28 16:18
还是看不懂! 高手们给一个详解吗? 好像不能返回当前日期的星期值! [ Last edited by ruisoft on 2008-11-29 at 11:09 ]

作者: sea1112     时间: 2008-11-28 16:37
Originally posted by 26933062 at 2007-2-6 03:11 AM: 比如20060110 如何通过以上日期判断是星期几?
@echo off :s echo 输入日期查看星期?格式[2008-08-08] set /p n=请输入: echo %date:~0,10%>bak>nul echo %n%|date>nul echo %n% 这天是:%date:~11,14% type bak|date>nul echo. pause&cls&goto s [ Last edited by sea1112 on 2008-11-28 at 16:52 ]