|
как проставить дату окончания если есть дата начала и количество месяцев?? | ☑ | ||
---|---|---|---|---|
0
Рауф
02.06.14
✎
13:28
|
есть поле Дата начала и поле количество месяцев нужно чтоб дата окончания проставлялась автоматом в зависимости от количество месяцев.
объясните как это сделать?? за ранние спасибо. |
|||
1
Enders
02.06.14
✎
13:28
|
Сложением?
|
|||
2
Maxus43
02.06.14
✎
13:28
|
добавитьмесяц
|
|||
3
f_vadim
02.06.14
✎
13:35
|
ДобавитьМесяц отстойная функция. Если дата попадает на конец месяца - пляшет всё куда зря.
|
|||
4
Maxus43
02.06.14
✎
13:39
|
(3) что?
Если 31 янаваря добавить 1 месяц - то будет 28 февраля, всё правильно |
|||
5
f_vadim
02.06.14
✎
13:40
|
(4) а если к 28 февраля прибавить месяц, какое число в марте будет?
|
|||
6
Maxus43
02.06.14
✎
13:43
|
(5) 28 конечно
|
|||
7
fisher
02.06.14
✎
13:44
|
(5) Нормально она работает. Понятно и предсказуемо. И есть случаи, когда именно так и требуется. Хочешь приведение к концу месяца - делай его явно.
|
|||
8
Maxus43
02.06.14
✎
13:44
|
юзай связку с КонецМесяца, если требуется
|
|||
9
Ислам
02.06.14
✎
13:47
|
(3) да, функция полное отстой. Но пока ничего лучше не придумали, придется пользоваться "ДобавитьМесяц".
|
|||
10
Ислам
02.06.14
✎
13:49
|
Можно сделать свою функцию, с дополнительным параметром - какой месяц нужно прибавить.
Например: к "28 февраля" прибавить месяц "март" = "31 марта". к "28 февраля" прибавить месяц "февраль" = "28 марта". Хахахаха )))))) |
|||
11
f_vadim
02.06.14
✎
13:50
|
(7) Насчёт предсказуемо, я б поспорил. Мне недавно пришлось разгребать код, где программер предположил, что раз конец месяца, значит он будет всегда.
Обвязку - да, приходится рисовать. |
|||
12
Maxus43
02.06.14
✎
13:51
|
(11) ну если тот програмер не знает как работает функция - это проблема програмера, а не функции
|
|||
13
f_vadim
02.06.14
✎
13:51
|
(12) заметь, как она работает - в СП не написано.
|
|||
14
Maxus43
02.06.14
✎
13:53
|
(13) это настолько очевидно, что даже Кэп отдыхает...
|
|||
15
Segate
02.06.14
✎
13:56
|
(4) чет нифига не логично, если мы прибавляем календарный месяц, то с 28 февраля + месяц должно быть 30 марта, а если мы прибавляем месяц по количеству дней, то тогда вариант с 31 января и 28 февраля - не логично. я не понимаю логику этой процедуры ))
|
|||
16
Kassius
02.06.14
✎
13:56
|
На (0) уже ответили ...
А зря, отправить ТС обратно в школу. "за ранние спасибо." |
|||
17
Molinor
02.06.14
✎
13:57
|
Всё логично. Прибавляем именно месяц, а если в получившемся месяце нет такого числа, то отматываем обратно пока не найдём имеющееся число.
|
|||
18
fisher
02.06.14
✎
13:57
|
(14) Достаточно чуть-чуть включить мозг.
25 февраля - 25 марта 26 февраля - 26 марта 27 февраля - 27 марта 28 февраля - 31 марта Неужели так логичнее? |
|||
19
fisher
02.06.14
✎
13:59
|
Тьфу, (18) было к (15)
|
|||
20
Segate
02.06.14
✎
14:02
|
(18) ну а 23 января - 23 февраля
24 января - 24 февраля ... 29 января -28 февраля 30 января -28 февраля 31 января -28 февраля этот агоритм просто в разы логичнее - да? |
|||
21
f_vadim
02.06.14
✎
14:02
|
(18) мне чего-то ни так, ни так не нравится.
Кривость, по-моему в том, что +1, а потом -1 и в исходную дату мы не попадаем. |
|||
22
fisher
02.06.14
✎
14:05
|
(20) Конечно. Ты передаешь 31 января и просишь добавить календарный месяц. Т.е. требуешь, чтобы дата была февральская. ЕДИНСТВЕННЫЙ нормальный способ это обеспечить для 31 января - выдать 28 февраля.
|
|||
23
Infsams654
02.06.14
✎
14:05
|
(19) см. табло ДобавитьМесяц(Дата(2012, 2, 29), 1) = 29.03.2012 0:00:00
т.е. из последнего дня предыдущего месяца у которого число дней меньше, чем в следующем без приведения к концу месяца не получить |
|||
24
f_vadim
02.06.14
✎
14:06
|
(22) ок, если мы считаем каледарными месяцами, конец месяца должен попадать на конец месяца или нет?
|
|||
25
fisher
02.06.14
✎
14:18
|
(24) Речь о том, что "конец месяца" - величина плавающая.
А мы ведем речь об алгоритме добавления календарного месяца к дате. В этом случае неизбежно возникает дилемма. А теперь подумай. Что будет проще. Воткнуть где надо КонецМесяца(), добить когда нужно дней до конца месяца, или анализировать "разрывы" и учитывать возможные "скачки"? |
|||
26
f_vadim
02.06.14
✎
14:24
|
(25) ты тоже прав.
хорошо бы параметр добавить - притягивать к концу месяца или нет. |
|||
27
fisher
02.06.14
✎
14:31
|
(26) Есть специальная функция, притягивающая к концу месяца.
Зачем путаницу наводить? |
|||
28
Segate
02.06.14
✎
14:37
|
(27) да эта функция могла бы с тем же успехом работать по алгоритму текущая дата+Количество дней в следующем месяце. и ее алгоритм не был бы менее кривым ) Так что путаница тут и так есть, а параметр наоборот внятность вносит.
|
|||
29
Gogger
02.06.14
✎
14:38
|
1. Количество месяцев можно добавить функцией ДобавитьМесяц (Дата, Количество);
2. Поскольку существует ситуация с февралем, желательно для него написать исключение по собственному алгоритму. 3. Для исключения можно выделить из даты день функцией ДеньМесяца(Дата), количество месяцев прибавлять к начальной дате месяца НачалоМесяца(Дата) потом прибавлять нужное количество дней функцией ДобавитьДень(Дата, Количество). |
|||
30
Maxus43
02.06.14
✎
14:41
|
(29) исключения для всех месяцев у которых 31 день, а следующий месяц 30 дней.
Лучше всем просто запомнить как она работает, а для особо одарённых - записать в блокнотик |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |