Имя: Пароль:
1C
 
29.02 добавить год
,
0 ASU_Diamond
 
27.02.15
07:12
При добавлении года к дате 29.02.2012 какой результат правильный:
28.02.2013 или 01.03.2013?
PS. 1С выдает 28.02.2013
1 Starhan
 
27.02.15
07:16
28.
Потому что если к 1.03.2013 прибавить год будет 1.03.2014 а не 02.03.2014.
2 Тындр
 
27.02.15
07:16
Добавить год и добавить 365 дней не одно и то же.
1с непогрешимо
3 RomaH
 
naïve
27.02.15
07:21
(2) ну ... в запросах по крайней мере
ДОБАВИТЬКДАТЕ(,1,ГОД) - прибавляет именно 365 дней
а вот
ДОБАВИТЬКДАТЕ(,12,МЕСЯЦ) - уже 1 год

по крайней мере в одном из релизов
4 ASU_Diamond
 
27.02.15
07:21
(1) год = 365,25 дней
5 ASU_Diamond
 
27.02.15
07:23
(3) сейчас выдает
ДОБАВИТЬКДАТЕ(28.02.2013,1,ГОД) = 28.02.2013
6 ASU_Diamond
 
27.02.15
07:23
*ДОБАВИТЬКДАТЕ(29.02.2013,1,ГОД) = 28.02.2013
7 ASU_Diamond
 
27.02.15
07:32
Кстати, тут возникает такая проблема:
ДОБАВИТЬКДАТЕ(29.02.2012,1,ГОД) = 28.02.2013
ДОБАВИТЬКДАТЕ(28.02.2013,-1,ГОД) = 28.02.2012
8 Рэйв
 
27.02.15
07:47
(7)Тебе рассказать что такое високосный год или сам погуглишь?
9 CHerypga
 
27.02.15
07:48
пятница же
КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2012, 2, 29), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ), СЕКУНДА, 1), МЕСЯЦ) КАК Поле1
10 cons74
 
27.02.15
08:18
(9) ты забыл добавить цикл)))
11 Эмбеддер
 
27.02.15
08:20
(27) ну и хорошо, что 1С выдает 28.02.2013, т.к. это правильно
12 Провинциальный 1сник
 
27.02.15
08:26
(8) Очевидно, что високосный год. Неочевидно несимметричное поведение, в одном случае 1с смещает день, в другом - нет.
13 Эмбеддер
 
27.02.15
08:29
(12) в чем неочевидность? хуже, если бы 1 марта 1С посчитала
14 фобка
 
27.02.15
08:30
(0) если к твоему дню рождения прибавить год какое число получится?
15 фобка
 
27.02.15
08:32
А речь о високосных.. Не вчитался
16 Провинциальный 1сник
 
27.02.15
08:34
(13) Если 1с из 29.02 високосного года путем прибавления года получает 28.02 невисокосного - пусть. Но тогда можно бы ожидать и обратного, что если год прибавляем к 28.02 невисокосного перед високосным - то получаем 29.02 високосного, а этого нет. Хотя, если данное поведение описано в документации, то ничего страшного. Оно описано?
17 фобка
 
27.02.15
08:39
(16) а если к 26.02 невисокосного перед високосным прибавить год, должно получиться 27.02 високосного? Для некоторых случаев логичнее использовать все же Конецпериода()
18 Провинциальный 1сник
 
27.02.15
08:46
"а если к 26.02 невисокосного перед високосным прибавить год, должно получиться 27.02 високосного"
Нет. Последний день февраля - особая дата, и её особость учтена в поведении, но учтена не совсем очевидно.
19 Fish
 
27.02.15
08:49
(16) "тогда можно бы ожидать и обратного, что если год прибавляем к 28.02 невисокосного перед високосным - то получаем 29.02 високосного" - а вот это было бы уже неправильным результатом.
20 Эмбеддер
 
27.02.15
09:30
(18) все-таки ровно через год после 28 февраля наступит 28 февраля
21 1Сергей
 
27.02.15
09:35
мне вот интересно, в каких случаях может понадобиться к дате прибавлять (отнимать) некое количество месяцев? Причем, если исходная дата конец месяца, то и в результате должна получиться тоже конец месяца.

ЗЫ Кстати, такая фигня возникает не только с февралём, но и с любым другим месяцем, если прибавлять или отнимать месяцы
22 hhhh
 
27.02.15
09:36
есть же более актуальные проблемы. Например

ДОБАВИТЬКДАТЕ(30.03.2013,1,МЕСЯЦ)

ДОБАВИТЬКДАТЕ(31.03.2013,1,МЕСЯЦ)
23 Эмбеддер
 
27.02.15
09:59
(21) например, когда на форме дата и кнопка "+ месяц" и "- месяц". это единственный случай, когда можно запутать пользователя (сначала он нажмем "+" а потом "-") и не попадет в ту же дату
24 Провинциальный 1сник
 
27.02.15
11:04
(20) Весьма спорно. Если год считать в днях - то да. Если в месяцах - то нет.
25 hhhh
 
27.02.15
11:13
(23) это круто, открыл предприятие, корректирую дату в документе 28.02.2014. Щелкаю следующий год, получаю 27.02.2015.
26 Эмбеддер
 
27.02.15
11:18
(24) коллега, все наоборот. в днях то зачем год прибавлять? добавлем 12 месяцев...
27 Эмбеддер
 
27.02.15
11:18
(25) а вот такого бага никак даже при всем желании добиться не получится
28 hhhh
 
27.02.15
11:23
(27) у разработчиков платформы получилось значит.
29 Провинциальный 1сник
 
27.02.15
11:42
(26) Как это? Был конец месяца, добавили 12 месяцев - стал не конец. Это не совсем логично.
30 eklmn
 
гуру
27.02.15
11:50
(29) вывод: високосный год придумали бабы!
31 1Сергей
 
27.02.15
11:54
(25) что-то гонишь
32 Torquader
 
27.02.15
12:50
На самом деле, вопрос даже не в високосном годе, а в том, что у месяцев разное число дней. Если, например, в 30 декабря прибавить три раза по месяцу, то получится 28 марта, а если сразу три месяца - то тридцатое.
Поэтому, в большинстве случаем вводят понятие технологического месяца, равного или 30 дней или 30.4 дня (с округлением результата до целого числа дней).
Тогда получается более менее честно, и всякие вопросы "почему так" снимаются.
В сервисах билинга по-другому просто нельзя, так как обычно оплачивается день услуги, а не месяц.
33 Провинциальный 1сник
 
27.02.15
16:04
(32) Это где как. Чаще всего оплачивается месяц, но если месяц использован не полностью - то считается доля оплаты пропорционально дням.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.