Имя: Пароль:
1C
 
Как посчитать число месяцев между ДатаНачало и ДатаКонца?
,
0 Викуся
 
07.11.08
13:13
1 GenV
 
07.11.08
13:15
(0) С такими интересами сначала фотку просить будут :))
2 Irbis
 
07.11.08
13:15
В пределах одного календарного года? Уточни условия задачи.
3 Irbis
 
07.11.08
13:15
(1) Не даст. В юморе пол автора обсуждают...
4 and2
 
07.11.08
13:16
"ВЫБРАТЬ
|    РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МЕСЯЦ) КАК Разность"
5 Викуся
 
07.11.08
13:17
(2)вообще может быть разные года.
6 Викуся
 
07.11.08
13:18
(4)а без запроса если?
7 Serg_1960
 
07.11.08
13:18
Если в запросе, то РАЗНОСТЬДАТ(ДатаКонца,ДатаНачало,МЕСЯЦ) - возвращает ЧИСЛО - количество полных месяцев
8 Дуб
 
07.11.08
13:20
(6) а без запроса - в цикле НачалоМесяца(), пока не получится меньше первой даты..
Может, поизвратнее что-нить есть ещё..
9 Викуся
 
07.11.08
13:21
(8)это долго
10 Irbis
 
07.11.08
13:21
Встроенные функции языка
Месяц (Month)
Синтаксис:
Месяц(<Дата>)
Параметры:
<Дата> (обязательный)
Тип: Дата. Исходная дата.
Возвращаемое значение:
Тип: Число. Месяц в указанной дате.
Описание:
Определяет месяц в указанной дате.
Пример:
см. пример для метода День()


Только все равно не ясно по условиям задачи между 30.04 и 01.05 сколько месяцев?
11 Дуб
 
07.11.08
13:21
(9) это - быстро ;)
12 GenV
 
07.11.08
13:22
(8) Да, в принципе простой формулой через Год и Месяц
13 and2
 
07.11.08
13:22
(6) а зачем?
14 Викуся
 
07.11.08
13:22
Месяц(ДатаНачало)-Месяц(ДатаКонца)?
15 Викуся
 
07.11.08
13:24
(13)  чтобы посчитать число колоночек, которые будут
16 Cheater
 
07.11.08
13:25
(14)
РазницаДат = Месяц(КонДата)-Месяц(НачДата)+1+12*(Год(КонДата)-Год(начДата));

а там уже зависит считаешь ты полные месяцы или нет
17 Викуся
 
07.11.08
13:25
(16)а если полные,тогда что?
18 Cheater
 
07.11.08
13:26
+(16) я не так назвал )) я количество месяцев считаю
19 Cheater
 
07.11.08
13:26
(17) если у тебя даты в пределах одного месяца это 0 или 1?
20 Викуся
 
07.11.08
13:27
(19)точно тогда значит неполные
21 Cheater
 
07.11.08
13:28
(20) (16) как раз для твоего случая
22 Викуся
 
07.11.08
13:29
Пасиба).
23 eklmn
 
гуру
07.11.08
13:30
ФОТО хдЕ?
24 Serg_1960
 
07.11.08
13:30
НачалоМесяца(ДатаКонца)-НачалоМесяца(ДатаНачало) - период в секундах, если не ноль - дели на 60, на 60, на 60, на ... Zzzz
25 Викуся
 
07.11.08
13:34
(24)ниии, а как же 31 и 30 дней?
26 Serg_1960
 
07.11.08
13:36
(25) Разыграли :) с пятницей Вас
27 Helna
 
07.11.08
13:38
(26) И вас! Хороших выходных!
28 Serg_1960
 
07.11.08
13:42
Только что придумал, ещё не проверял :)

Разность = РазностьДатМесяц(ДатаНачало,ДатаКонца);

Функция РазностьДатМесяц(ДатаНачало,ДатаКонца)
  Если НачалоМесяца(ДатаНачало) >= НачалоМесяца(ДатаКонца) Тогда
     Возврат 0;
  Иначе
     Возврат 1 + РазностьДатМесяц(ДатаНачало,НачалоМесяца(ДатаКонца)-1);
  КонецЕсли;
КонецФункции
29 Helna
 
07.11.08
13:45
(28) (16) попроще выглядит, а потом проверить результат на знак и все
30 Serg_1960
 
07.11.08
13:51
(28) Мы такие крутые прогеры, - а Вы нам "попроще" :( Мы и так ясно и доступно для народа изложили... Потому как Мы можем и круче загнуть :)

Функция РазностьДатМесяц(ДатаНачало,ДатаКонца)
  Возврат ?(НачалоМесяца(ДатаНачало) >= НачалоМесяца(ДатаКонца), 0, 1 + РазностьДатМесяц(ДатаНачало,НачалоМесяца(ДатаКонца)-1));
КонецФункции
31 Cheater
 
07.11.08
13:55
(29) ты случайно не (0)?
32 форсмажор
 
07.11.08
15:27
//365.2422 число дней в тропическом году
//30.43655 число месяцев в тропическом году


ДК = год(ДатаК)*86400*365.2422 + Месяц(ДатаК)*86400*365.2422/12+День(ДатаК)*86400+Час(ДатаК)*3600+Минута(ДатаК)*60+Секунда(ДатаК);

ДН = год(ДатаН)*86400*365.2422 + Месяц(ДатаН)*86400*365.2422/12+День(ДатаН)*86400+Час(ДатаН)*3600+Минута(ДатаН)*60+Секунда(ДатаН);
   
ЧислоМесяцев = (ДК-ДН)/86400/30.43685;
сообщить(ЧислоМесяцев);
33 Serg_1960
 
07.11.08
15:30
(32) Снимаю шляпу... не в знак уважения, а в растерянности - чтобы макушку почесать :)
34 форсмажор
 
07.11.08
15:34
//сори 30.43655 число дней в месяце в топическом году )))
35 rs_trade
 
07.11.08
15:36
недавно было, тут постил пример из ЗиКа
Как посчитать количество дней в интервале ?
36 eklmn
 
гуру
07.11.08
15:44
(31) может их две в одном месте? :)
37 Serg_1960
 
07.11.08
15:55
(35) Вообще-то и УПП тоже не лыком шито, но так ведь веселее :)

// Процедура вычисляет количество лет, месяцев и дней между двумя датами
//
// Параметры
//  Дата1    – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
//  Дата2    – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа)
//  Лет        – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
//  Месяцев    – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
//  Дней    – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//
Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0) Экспорт
   
   Лет        = 0;
   Месяцев    = 0;
   Дней    = 0;
   Если Дата1 > Дата2 Тогда
       
       ВременнаяДата = Дата1;
       Если День(ВременнаяДата) < День(Дата2) Тогда
           Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400;
           ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
       КонецЕсли;
       Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда
           ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
           Месяцев = 12;
       КонецЕсли;
       Лет        = Макс(             Год(ВременнаяДата)        - Год(Дата2),    0);
       Месяцев    = Макс(Месяцев    + Месяц(ВременнаяДата)    - Месяц(Дата2),    0);
       Дней    = Макс(Дней        + День(ВременнаяДата)    - День(Дата2),    0);
       
       // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах
       Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда
           Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));
       КонецЕсли;
       
   КонецЕсли;

КонецПроцедуры    // РазобратьРазностьДат
38 Anjo
 
07.11.08
16:03
Кол = 0;
Дата1 = ДатаНачала;
Дата2 = ДатаКонца;
Пока Дата1 < Дата2 Цикл
Дата1 = ДобавитьМесяц(Дата1,1);
Кол = Кол+1;
КонецЦикла;

может так
39 форсмажор
 
07.11.08
16:40
(37) жестко