Batch : Affichage de la date moins 3 jours

Résolu
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -  
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je cherche à créer un batch qui sera capable de m'afficher la date avec 3 jours de retard.
Exemple : le 02/01/2014, il faudra qu'il m'affiche le 31/12/2013 ...
Pas évident je sais :-)

Merci d'avance pour votre aide.
A voir également:

3 réponses

ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Hello,

j'ai trouvé un truc sur le net et avec j'ai fait ça :

@echo off
for /F "tokens=1,2,3 delims=/" %%I in ('date /T') do call :DateToDays %%K %%J %%I days
::echo/%days%
set /A nday=%days%-3
::echo/%nday%
call :DaysToDate %nday% yyyy mm dd
::call :DaysToDate %1 yy mm dd
set ndatealt=%dd%/%mm%/%yy%
::echo/%yy%-%mm%-%dd%
echo %ndatealt%

goto :EOF

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DaysToDate %days% yy mm dd
::
:: By: Ritchie Lawrence, 2002-06-15. Version 1.1
::
:: Func: Returns a calendar date from the number of elapsed days since 1st
::       January 1970. For NT4/2K/XP.
:: 
:: Args: %1 MJD used to create calendar date (by val)
::       %2 var to receive year component, 4 digits (by ref)
::       %3 var to receive month component, 2 digits, 01-12 (by ref)
::       %4 var to receive day of month component, 2 digits, 01-31 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
goto :EOF

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToDays %yy% %mm% %dd% days
::
:: By:   Ritchie Lawrence, 2002-09-26. Version 1.0
::
:: Func: Returns the number of days elapsed since 1st January 1970 for a
::       given date. For NT4/2K/XP
:: 
:: Args: %1 year component used to create days, 2 or 4 digits (by val)
::       %2 month component used to create days, leading zero ok (by val)
::       %3 date of month used to create days, leading zero ok (by val)
::       %4 var to receive number of elapsed days (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


Tu trouveras ta variable date -3 jours dans ndatealt
Si ça peut t'aider ... (testé sous W7) (J'ai gardé le format Fr pour le formatage de la variable ndatealt.)

Ça aurait peut être été plus facile dans un autre langage mais c'était pas la question ... :)

J'utilise la date système (boucle for) mais en modifiant un peu tu devrais pouvoir utiliser la date de ton choix.
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour et merci Ryko,
ça marche mais honnêtement je ne m'attendais pas à un truc aussi complexe.
Je comprends maintenant un peu toutes les critiques entendues sur le monde MS... ;)
Merci encore ! :)
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Franchement si les fonctions n'avaient pas déjà été écrites par Ritchie Lawrence (en 2002 et ça tiens encore la route ^^) je l'aurais pas trouvé, ou alors dans un autre langage.

Dommage qu'on ne puisse pas récupérer simplement (sans ajout ou écriture de programmes autres) l'heure posix dans l'environnement Windows (les millisecondes depuis 1/1/1970), ça faciliterait les choses ...

Il y a pas mal d'autres fonctions sympas sur son site ...
Merci à toi de m'avoir qui par ta question m'a permis de le découvrir :-)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
avec la commande date Unix pour DOS
C:> .\date -d "3 days ago"
Mon May 20 12:40:52 
C:>
https://forums.commentcamarche.net/forum/affich-27859359-commande-permettant-de-recuperer-le-quantieme-du-jour-en-dos#5
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Dubcek !
merci pour ta participation, mais mon projet ne me permet pas d'intégrer le script que tu proposes.
La proposition de Ryko devrait pouvoir me suffire.
Merci et à bientôt ! ;)
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Tiens une version modifiée qui utilise une date entrée en argument :

@echo off
::for /F "tokens=1,2,3 delims=/" %%I in ('date /T') do call :DateToDays %%K %%J %%I days

for /f "tokens=1,2,3 delims=/" %%I in ("%1") do call :DateToDays %%K %%J %%I days

echo/%days%
set /A nday=%days%-3
echo/%nday%
call :DaysToDate %nday% yyyy mm dd
::call :DaysToDate %1 yy mm dd
set ndatealt=%dd%/%mm%/%yy%
::echo/%yy%-%mm%-%dd%
echo %ndatealt%

goto :EOF

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DaysToDate %days% yy mm dd
::
:: By: Ritchie Lawrence, 2002-06-15. Version 1.1
::
:: Func: Returns a calendar date from the number of elapsed days since 1st
::       January 1970. For NT4/2K/XP.
:: 
:: Args: %1 MJD used to create calendar date (by val)
::       %2 var to receive year component, 4 digits (by ref)
::       %3 var to receive month component, 2 digits, 01-12 (by ref)
::       %4 var to receive day of month component, 2 digits, 01-31 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
goto :EOF

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToDays %yy% %mm% %dd% days
::
:: By:   Ritchie Lawrence, 2002-09-26. Version 1.0
::
:: Func: Returns the number of days elapsed since 1st January 1970 for a
::       given date. For NT4/2K/XP
:: 
:: Args: %1 year component used to create days, 2 or 4 digits (by val)
::       %2 month component used to create days, leading zero ok (by val)
::       %3 date of month used to create days, leading zero ok (by val)
::       %4 var to receive number of elapsed days (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


J'ai vérifié :

(je l'avais appelé ttd.bat)

C:\temp\Work>ttd 02/01/2014
16072
16069
30/12/2013

C:\temp\Work>
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Ta première proposition est la meilleur !
Merci encore pour ton aide précieuse.
Bonne continuation.
0