首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一天又一天

一天又一天
EN

Stack Overflow用户
提问于 2017-09-05 15:48:04
回答 4查看 207关注 0票数 0

我正在尝试获得StartDate (今天)和EndDate (昨天)。我一直在努力保持一天的数字格式正确。然而,我注意到,系统不喜欢有前导零,当它从"09“中减去1时就失败了,但是与"10”非常完美。我怎么才能解决这个问题?

代码语言:javascript
复制
echo off

REM CurrentDate (END DATE)      -------------------------------------------------------------
Set dd=%date:~4,2%
Set mm=%date:~7,2%
Set yyyy=%date:~10,4%
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM

echo %END_DATE%

REM CurrentDate - 1 (START DATE)  ------------------------------------------------------------
set m1dd=%date:~4,2%
set m1dd=09
echo %m1dd%
set /A m1dd -= 1
echo %m1dd%
Set m1dd=0%m1dd%
echo %m1dd%
Set m1dd=%m1dd:~-2%
echo %m1dd%
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM

echo %START_DATE%

pause
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-05 16:49:13

这个批处理文件使用XCOPY命令来验证该日期实际上是一个有效日期,因为您要从YYYYMMDD中减去1。

代码语言:javascript
复制
@echo off
setlocal
set rand=%random%
md "dummy%rand%\empty%rand%"

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"

set /a y=%dt:~0,4%
set /a m=1%dt:~4,2%
set /a d=1%dt:~6,2%

REM set the number of days to substract
SET DAYS=1
FOR /L %%G IN (1,1,%days%) DO CALL :loop

set subdate=%y%%m:~-2%%d:~-2%
echo Today is: %dt:~0,8%
echo Yesterday was: %subdate%

rd /s /q "dummy%rand%"
pause
endlocal
GOTO :EOF

:loop
  set /a d-=1

  if %d% lss 101 (
    set d=131
    set /a m-=1

    if %m% lss 101 (
      set m=112
      set /a y-=1
    )
  )

xcopy /d:%m:~-2%-%d:~-2%-%y% /t "dummy%rand%\empty%rand%" "dummy%rand%" >nul 2>&1 || goto loop

GOTO :EOF

输出

代码语言:javascript
复制
Today is: 20170905
Yesterday was: 20170904
Press any key to continue . . .
票数 1
EN

Stack Overflow用户

发布于 2017-09-05 16:57:23

您可以从批处理文件中使用powershell:

代码语言:javascript
复制
@Echo Off
Set "TS=.ToString('yyy-MM-dd') + \" 00:00 AM\""
For /F "UseBackTokens=1*Delims=@" %%A In (`
    PowerShell "(Get-Date)%TS% + \"@\" + (Get-Date).AddDays(-1)%TS%"`
) Do Set "TD=%%A" & Set "YD=%%B"
Echo  %%TD%% = %TD%
Echo  %%YD%% = %YD%
Timeout -1
票数 2
EN

Stack Overflow用户

发布于 2017-09-05 16:10:01

计算日期的方式并不理想。要获得更好的日期计算,可以参考此链接

如果您只是在寻找使当前代码运行的快速修补程序,只需按以下方式删除前导零:

代码语言:javascript
复制
echo off

REM CurrentDate (END DATE)      -------------------------------------------------------------
Set dd=%date:~4,2%
Set mm=%date:~7,2%
Set yyyy=%date:~10,4%
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM

echo %END_DATE%

REM CurrentDate - 1 (START DATE)  ------------------------------------------------------------
set m1dd=%date:~4,2%
set m1dd=09
set /a m1dd=100%m1dd% %% 100
echo %m1dd%
set /a m1dd -= 1
echo %m1dd%
Set m1d=0%m1dd%
echo %m1dd%
Set m1d=%m1dd:~-2%
echo %m1dd%
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM

echo %START_DATE%

pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46058962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档