Получить дату (+1 год -1 день)

1. Taisa07 04.09.14 16:38 Сейчас в теме
Добрый день!
В реквизитах формы нужно заполнить период в год начиная с выбранной даты. Как получить значение +1 год -1 день? С годом все ясно, а как получить предыдущий день?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. vcv 89 04.09.14 18:26 Сейчас в теме
(1) Точно с годом всё ясно? А если, например, к 28 февраля 2011 года год добавить, какая дата получится? А если к 27 февраля 2011 год добавить?
5. _Z1 38 04.09.14 19:07 Сейчас в теме
(4) Ладно сказал бы к 29 февраля добавить год а к любой другой дате не вижу
что может не получиться.


Д1 нач дата Д2 то что нужно по subj
Д2 = ДобавитьМесяц(Д1,12) - 1;
6. vcv 89 04.09.14 19:50 Сейчас в теме
(5) _Z1,
ДобавитьМесяц('28.02.2011',12) = 28.02.12 - конец февраля 2011 не преобразуется в конец февраля 2012.
ДобавитьМесяц('01.03.2011',12) = 01.03.12
'01.03.11' - '28.02.11' = 1
ДобавитьМесяц('01.03.2011',12) - ДобавитьМесяц('28.02.2011',12) = 2

В 2001 в феврале 28 дней. 2012 високосный, 29 дней.
Я хочу сделать отчет за год, дату начала выбираю 1 февраля и корректно получаю отчет за год.
Ставлю дату начала последний день февраля февраля 2011 года и получаю ошибочный отчет, где из года выпадает один день - 29 февраля 2012 года.
2. Ёпрст 1063 04.09.14 16:41 Сейчас в теме
3. Taisa07 04.09.14 16:57 Сейчас в теме
7. vcv 89 04.09.14 19:52 Сейчас в теме
Аналогично
ДобавитьМесяц('29.02.2012',12) - 1 = 27.02.13
Опять день потерялся из года.
8. varelchik 05.09.14 09:41 Сейчас в теме
А с чего вы взяли что потерялся?
2013 не высокосный.
Так что все тут правильно.
в 2013 в феврале 28 дней.
TaTaPuH-Magic; +1 Ответить
9. vcv 89 05.09.14 11:03 Сейчас в теме
(8) Согласен, в (7) не потерялся, поторопился писать. А в (6) таки потерялся.
10. PSMNN 44 05.09.14 11:14 Сейчас в теме
Д1 нач дата Д2 то что нужно по subj
Если ДеньГода(КонецГода(Д1)) = 366 ИЛИ ДеньГода(КонецГода(ДобавитьМесяц(Д1,12))) = 366 Тогда
Д2 = Д1 + 366;
Иначе
Д2 = Д1 + 365;
КонецЕсли;
11. PSMNN 44 05.09.14 11:15 Сейчас в теме
-1 день
Д1 нач дата Д2 то что нужно по subj
Если ДеньГода(КонецГода(Д1)) = 366 ИЛИ ДеньГода(КонецГода(ДобавитьМесяц(Д1,12))) = 366 Тогда
Д2 = Д1 + 365;
Иначе
Д2 = Д1 + 364;
КонецЕсли;
13. Vovan58 65 05.09.14 17:31 Сейчас в теме
(11) PSMNN, Ужос!!! Посчитайте результат для следующих начальных дат 27.02.2012, 28.02.2012, 01.03.2012 ? Что получиться?
12. Taisa07 05.09.14 13:56 Сейчас в теме
Всем спасибо за помощь!
14. PSMNN 44 05.09.14 17:56 Сейчас в теме
Vovan58 прав, правильно так
Если ДеньГода(КонецГода(Д1)) = 366 И Месяц(Д1) < 3 Тогда
Д2 = Д1 + 365*24*60*60;
Иначе
Д2 = Д1 + 364*24*60*60;
КонецЕсли;
15. vcv 89 05.09.14 18:06 Сейчас в теме
(14) А самое правильное, формулировать задачу правильно, прав не как у ТС. Сильно подозреваю, что там какой-нибудь аналитический отчет по сравнению двух календарных периодов. В большинстве случаев делается сравнение определённых периодов, а не "плюс год". Например, первую декаду января сравнить чюс аналогичным периодом прошлого года. Или сравнить август 2014 с августом 2013. Или лето 2014 с летом 2012... Тут правильно оперировать именно периодами квартал, месяц, неделя и т.д., а не "плюс год".
16. Taisa07 05.09.14 19:03 Сейчас в теме
В моем случае нужно установить значение реквизита формы и именно дата+год-1 день. Ситуация с 29 февраля крайне маловероятна и, в случае возникновения, дата будет меняться пользователями.
17. _Z1 38 05.09.14 19:13 Сейчас в теме
(16) Все в (5) написано.
меньше кода для этого subj придумать тудно будет.
18. Taisa07 05.09.14 19:17 Сейчас в теме
(17) _Z1, так и сделала. Со вчерашнего дня все благополучно функционирует.
19. vetalk 10.09.14 19:07 Сейчас в теме
Можно из даты вычленить год, месяц, день. Прибавить к году 1 и потом опять преобразовать в дату. От результирующей даты отнять 1 и будет требуемый результат.
20. vcv 89 10.09.14 20:17 Сейчас в теме
(19) Ну ну.
Дата(2012,2,29) = 29.02.12
Дата(2012+1,2,29) = . .
21. varelchik 11.09.14 10:25 Сейчас в теме
22. N1LL 16.04.21 10:01 Сейчас в теме
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Дата, ГОД, 1), День, -1)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот