powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
11 сообщений из 11, страница 1 из 1
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35428337
swall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Необходимо, чтобы в batch файле переменная имела значение текущая дата + 1 месяц. При этом скрипт не должен зависеть от локали.

Пока я нашла только способ привести текущую дату к нужному мне формату:
set SYSDATE=20%DATE:~-2%-%DATE:~3,2%-%DATE:~6,2%

Буду признательна за помощь, ссылки.
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35428433
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что для вас "+ 1 месяц" ?
31 января + 1 месяц - это сколько?
(31 января + 1 месяц) + 1 месяц должно быть равно 31 января + 2 месяца ?
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35428884
swall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это непринципиально. Допустимо прибавлять 30 дней, если это проще реализовать.
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35428941
swall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
допустимо даже просто увеличить номер месяца на 1. Дата направляется в приложение, которое способно скушать что угодно, например 2008-13-31 автоматически пересчитается в 2009-01-31.
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35429768
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь обсуждается "как получит вчерашнее число в бат файле".
думаю, тем же методом можно и вашу задачу решить.
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35430005
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел на вчерашнюю дату на шеле от мс, написал текущую на zsh
1.cmd
Код: plaintext
1.
2.
3.
4.
echo off
set SYSDATE=XX.YY.ZZ
sh  date.sh
echo batch file: %SYSDATE%


date.sh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
echo first: $SYSDATE


x=`date +%j`

d=`date +%d`
m=`date +%m`
y=`date +%y`


x1=`expr $x +  30 `
x1=`expr $x1 %  365 `
echo $x1, $x
if [ $x1 -lt  $x  ] 
then
  y=`expr $y +  1 `
  m= 1 
else
  m=`expr $m +  1 `
fi

if [ $m -lt  10  ]
then
  m= 0 $m
fi
nd=`date -d $y$m$d`
SYSDATE=$nd
echo second: $SYSDATE

результат выполнения 1.cmd
Код: plaintext
1.
2.
3.
4.
5.
C:\temp>echo off 
first: XX.YY.ZZ
226, 196
second: Thu Aug 14 00:00:00 Pacific Daylight Time 2008
batch file: XX.YY.ZZ
из zsh переменная SYSDATE не меняется, придется через файл,
а так вроде ниче
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35430726
swall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шелл скрипты у меня не запускаются. Справилась следующим образом:

set dt=%date%
set /a yr=%dt:~-4%

if %dt:~3,2%==12 (
set /a yr+=1
set mn=01
) else (
set /a m=%dt:~4,1%
set /a m+=1
set mn=%dt:~3,1%%m%
)
set dy=%dt:~,2%
set mdate=%yr%-%mn%-%dy%

Вопрос, насколько формат %date% зависит от локали и версии винды?
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35430918
swall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предыдущий вариант работает неправильно.

set dt=%date%
set /a yr=%dt:~-4%
set /a mn=%dt:~4,1%
set /a mn+=1
set mn=%dt:~3,1%%mn%

if %mn%==12 (
set /a yr+=1
set mn=01
)

set dy=%dt:~,2%
set mdate=%yr%-%mn%-%dy%
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35437380
AndreyArtemev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swall

Вопрос, насколько формат %date% зависит от локали и версии винды?

Зависит от Country
Задание использования подсистемой MS-DOS международного формата для времени, дат, валют, разделителей и преобразования символов.

тынц
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35437391
AndreyArtemev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц не получился, значит так (ввести в iexplorer):
ms-its:C:\WINDOWS\Help\ntcmds.chm::/country.htm
...
Рейтинг: 0 / 0
возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
    #35466241
jsXYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swallДобрый день. Необходимо, чтобы в batch файле переменная имела значение текущая дата + 1 месяц. При этом скрипт не должен зависеть от локали.

Пока я нашла только способ привести текущую дату к нужному мне формату:
set SYSDATE=20%DATE:~-2%-%DATE:~3,2%-%DATE:~6,2%

Буду признательна за помощь, ссылки.
вот вам, кто-то так старался :
file DateMath.cmd
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
   @ECHO off
   SETLOCAL
   :: DateMath, a general purpose date math routine
   
   :: If DateMath detects an error, variable v_dd_int is set to 999999.
   SET v_dd_int=0
   SET v_mm_int=0 
   SET v_yy_int=0
   SET v_ymd_str=
   SET v_mm_str=
   SET v_dd_str=
   
   IF "%3"=="" goto s_syntax
   IF "%4"=="+" goto s_validate_year
   IF "%4"=="-" goto s_validate_year
   IF "%4"=="" goto s_validate_year
   
   :s_syntax
   echo.
   echo DATEMATH SYNTAX:
   echo _______________
   echo.
   echo DateMath will set the variables as listed below
   echo 'str' variables include leading zeros e.g. "01"
   echo 'int' variables leading zeros are stripped e.g. "1"
   echo.
   echo CALL DateMath YY MM DD - YY2 MM2 DD2 
   echo.
   echo Will set variable v_dd_int to the signed difference
   echo between the 2 dates (measured in days)
   echo.
   echo.
   echo CALL DateMath YY MM DD +/- Days 
   echo.
   echo Will set the following variables to the result of 
   echo adding or substracting days from the initial date:
   echo    v_ymd_str,  v_yy_int
   echo    v_mm_str, v_mm_int,
   echo    v_dd_str, v_dd_int
   echo.
   echo.
   echo ___________________________________
   pause

   echo.
   echo.
   echo CALL DateMath YY MM DD
   echo.
   echo Will set the following variables:
   echo    v_ymd_str,  v_yy_int
   echo    v_mm_str, v_mm_int,
   echo    v_dd_str, v_dd_int
   echo.
   echo ___________________________________
   echo.
   echo v_ymd_str is in YYYYMMDD format.
   echo.
   echo v_yy_int is in YYYY format, even if YY format was originally supplied.
   echo This conversion is useful for FAT/NTFS file dates which are in YY format.
   echo.

   SET /a v_dd_int=999999
   goto :eof

   :s_validate_year
   ::strip leading zeros
    SET v_yy=%1
    if %v_yy:~0,1% EQU 0 set v_yy=%v_yy:~1%

    :: Check for Y2K
    IF %v_yy% LSS 100 IF %v_yy% GEQ 80 SET /A v_yy += 1900
    IF %v_yy% LSS 80 SET /A v_yy += 2000
    
    :: at this point v_yy contains a 4 digit year

   ::validate month and day
    if %2 GTR 12 goto s_syntax
    if %3 GTR 31 goto s_syntax

    SET v_mm=%2
    SET v_dd=%3

    ::strip leading zeros
    if %v_mm:~0,1% EQU 0 set v_mm=%v_mm:~1%
    if %v_dd:~0,1% EQU 0 set v_dd=%v_dd:~1%

   :: Set the int variables
    SET /a v_dd_int=%v_dd%
    SET /a v_yy_int=%v_yy%
    SET /a v_mm_int=%v_mm%

   :: Determine which function to perform - ADD, SUBTRACT or CONVERT

    If not "%6"=="" goto s_validate_2nd_date 
    if "%4"=="" goto s_convert_only

   :: Add or subtract  days to a date
    SET /a v_number_of_days=%5
    goto s_add_or_subtract_days

   :s_convert_only

    SET /a v_dd_int=%v_dd%
    IF %v_dd% LEQ 9 (SET v_dd_str=0%v_dd%) ELSE (SET v_dd_str=%v_dd%)
    IF %v_mm% LEQ 9 (SET v_mm_str=0%v_mm%) ELSE (SET v_mm_str=%v_mm%)
    SET v_ymd_str=%v_yy%%v_mm_str%%v_dd_str%

   ECHO DATEMATH - Convert date only (no maths)
   goto s_end
   ::::::::::::::::::::::::::::::::::::::::::::::::::
   
   :s_validate_2nd_date
    If "%4"=="+" goto s_syntax
    :: Subtracting one date from another ::::::
    :: strip leading zero
    SET v_yy2=%5
    if %v_yy2:~0,1% EQU 0 set v_yy2=%v_yy2:~1%

    if %v_yy2% GTR 99 goto s_validate2nd_month
    if %v_yy2% GTR 49 goto s_prefix_2_1950_1999
    if %v_yy2% LSS 10 goto s_prefix_2_2000_2009
    SET v_yy2=20%v_yy2%
    goto s_validate2nd_month

   :s_prefix_2_2000_2009
    SET v_yy2=200%v_yy2%
    goto s_validate2nd_month

   :s_prefix_2_1950_1999
    SET v_yy2=19%v_yy2%

   :s_validate2nd_month
    ::strip leading zeros
    ::SET /a v_yy2=%v_yy2%
    if %v_yy2:~0,1% EQU 0 set v_yy2=%v_yy2:~1%
    ::v_yy2 now contains a 4 digit year

    if %6 GTR 12 goto s_syntax
    SET v_mm2=%6

    if %7 GTR 31 goto s_syntax
    SET v_dd2=%7

    ::strip leading zeros
    ::SET /a v_mm2=%v_mm2%
    if %v_mm2:~0,1% EQU 0 set v_mm2=%v_mm2:~1%
    ::SET /a v_dd2=%v_dd2%
    if %v_dd2:~0,1% EQU 0 set v_dd2=%v_dd2:~1%

   call :s_julian_day %v_yy_int% %v_mm_int% %v_dd_int%
   SET v_sumdays1=%v_JulianDay%

   call :s_julian_day %v_yy2% %v_mm2% %v_dd2%
   SET v_sumdays2=%v_JulianDay%
   
   SET /a v_dd_int=%v_sumdays1% - %v_sumdays2%
   
   ECHO DATEMATH - Subtracting one date from another = days difference
   ECHO ~~~~~~
   ECHO %v_dd_int%
   ECHO ~~~~~~
   goto s_end_days
   ::::::::::::::::::::::::::::::::::::::::::::::::::
   
   :s_add_or_subtract_days
   if /i "%4"=="+" goto s_add_up_days

   :: Subtract all days ::::::
   SET /a v_dd=%v_dd% - %v_number_of_days%
   
   :s_adjust_month_year
   if %v_dd% GEQ 1 goto s_add_subtract_days_DONE
   SET /a v_mm=%v_mm% - 1
   if %v_mm% GEQ 1 goto s_add_days_%v_mm%
   SET /a v_yy=%v_yy% - 1
   SET /a v_mm=%v_mm% + 12
   goto s_add_days_%v_mm%
   
   :s_add_days_2
   SET /a v_dd=%v_dd% + 28
   SET /a v_leapyear=%v_yy% / 4
   SET /a v_leapyear=%v_leapyear% * 4
   if %v_leapyear% NEQ %v_yy% goto s_adjust_month_year
   SET /a v_dd=%v_dd% + 1
   goto s_adjust_month_year
    
   :s_add_days_4
   :s_add_days_6
   :s_add_days_9
   :s_add_days_11
   SET /a v_dd=%v_dd% + 30
   goto s_adjust_month_year

   :s_add_days_1
   :s_add_days_3
   :s_add_days_5
   :s_add_days_7
   :s_add_days_8
   :s_add_days_10
   :s_add_days_12
   SET /a v_dd=%v_dd% + 31
   goto s_adjust_month_year
 
   :s_add_up_days
   :: add all days ::::::
   SET /a v_dd=%v_dd% + %v_number_of_days%
   
   :s_subtract_days_
   goto s_subtract_days_%v_mm%
     
   :s_adjust_mth_yr
   SET /a v_mm=%v_mm% + 1
   if %v_mm% LEQ 12 goto s_subtract_days_%v_mm%
   SET /a v_yy=%v_yy% + 1
   SET /a v_mm=%v_mm% - 12
   goto s_subtract_days_%v_mm%

   :s_subtract_days_2
   SET /a v_leapyear=%v_yy% / 4
   SET /a v_leapyear=%v_leapyear% * 4
   If %v_leapyear% EQU %v_yy% goto s_subtract_leapyear

   if %v_dd% LEQ 28 goto s_add_subtract_days_DONE
   SET /a v_dd=%v_dd% - 28
   goto s_adjust_mth_yr
   
   :s_subtract_leapyear
   if %v_dd% LEQ 29 goto s_add_subtract_days_DONE
   SET /a v_dd=%v_dd% - 29
   goto s_adjust_mth_yr
   
   :s_subtract_days_4
   :s_subtract_days_6
   :s_subtract_days_9
   :s_subtract_days_11
   if %v_dd% LEQ 30 goto s_add_subtract_days_DONE
   SET /a v_dd=%v_dd% - 30
   goto s_adjust_mth_yr

   :s_subtract_days_1
   :s_subtract_days_3
   :s_subtract_days_5
   :s_subtract_days_7
   :s_subtract_days_8
   :s_subtract_days_10
   :s_subtract_days_12
   if %v_dd% LEQ 31 goto s_add_subtract_days_DONE
   SET /a v_dd=%v_dd% - 31
   goto s_adjust_mth_yr
   
   :s_add_subtract_days_DONE
   SET /a v_dd_int=%v_dd%
   SET /a v_mm_int=%v_mm%
   SET /a v_yy_int=%v_yy%
   IF %v_dd% GTR 9 (SET v_dd_str=%v_dd%) ELSE (SET v_dd_str=0%v_dd%)
   IF %v_mm% GTR 9 (SET v_mm_str=%v_mm%) ELSE (SET v_mm_str=0%v_mm%)
   SET v_ymd_str=%v_yy%%v_mm_str%%v_dd_str%
   
   ECHO DATEMATH - add or subtract days from a date = new date
   goto s_end
   ::::::::::::::::::::::::::::::::::::::::::::::::::

   :s_julian_day
   SET v_year=%1
   SET v_month=%2
   SET v_day=%3
   
   SET /a v_month=v_month
   SET /a v_day=v_day
   
   SET /A a = 14 - v_month
   SET /A a /= 12
   SET /A y = v_year + 4800 - a
   SET /A m = v_month + 12 * a - 3
   SET /A m = 153 * m + 2
   SET /A m /= 5
   SET /A v_JulianDay = v_day + m + 365 * y + y / 4 - y / 100 + y / 400 - 32045
   
   ECHO The Julian Day is [%v_JulianDay%]
   goto :eof
   ::::::::::::::::::::::::::::::::::::::::::::::::::
   
   :s_end
   ECHO ~~~~~~~~~~~~
   ECHO [%v_ymd_str%] YY=[%v_yy_int%] MM=[%v_mm_str%] DD=[%v_dd_str%]
   ECHO ~~~~~~~~~~~~
   :s_end_days
   ENDLOCAL&SET /a v_yy_int=%v_yy_int%&SET /a v_mm_int=%v_mm_int%&SET /a v_dd_int=%v_dd_int%&SET v_ymd_str=%v_ymd_str%&SET  v_mm_str=%v_mm_str%&SET v_dd_str=%v_dd_str%

file examples.txt
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
D:\>datemath 02 05 08
DATEMATH - Convert date only (no maths)
~~~~~~~~~~~~
[20020508] YY=[2002] MM=[05] DD=[08]
~~~~~~~~~~~~


D:\>datemath 2007 12 30
DATEMATH - Convert date only (no maths)
~~~~~~~~~~~~
[20071230] YY=[2007] MM=[12] DD=[30]
~~~~~~~~~~~~



D:\>datemath 27 12 01 - 02 11 02
The Julian Day is [2461741]
The Julian Day is [2452581]
DATEMATH - Subtracting one date from another = days difference
~~~~~~
9160
~~~~~~


D:\>datemath 02 11 02 + 9160
DATEMATH - add or subtract days from a date = new date
~~~~~~~~~~~~
[20271201] YY=[2027] MM=[12] DD=[01]
~~~~~~~~~~~~


D:\>datemath 12 09 08 - 11 09 08
The Julian Day is [2456179]
The Julian Day is [2455813]
DATEMATH - Subtracting one date from another = days difference
~~~~~~
366
~~~~~~


D:\>datemath 13 09 08 - 12 09 08
The Julian Day is [2456544]
The Julian Day is [2456179]
DATEMATH - Subtracting one date from another = days difference
~~~~~~
365
~~~~~~


...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / возможно ли в batch file посчитать дату = сегодня + 1 месяц ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]