По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ответь на вопрос: какова разность
между 31.12.08 и 01.01.08
???
код примерно вот так выглядит
между 31.12.08 и 01.01.08
???
код примерно вот так выглядит
Код |
---|
Процедура Сформировать()
ТекДата = Дата1;
КолвоМесяцев = 0;
Пока ТекДата <= Дата2 Цикл
ТекДата = ДобавитьМесяц(ТекДата,1);
КолвоМесяцев = КолвоМесяцев + 1;
КонецЦикла;
КолвоМесяцев = КолвоМесяцев - 1;
Дней = Дата2 - ДобавитьМесяц(ТекДата,-1);
Лет = Цел(КолвоМесяцев/12);
КолвоМесяцев = КолвоМесяцев - Лет * 12;
Сообщить(""+Лет+"/"+КолвоМесяцев+"/"+Дней);
КонецПроцедуры Показать полностью |
Код |
---|
Процедура Сформировать()
ТекДата=НачДата;
СчМес=0;
Пока ТекДата<КонДата Цикл
СчМес=СчМес+1;
ТекДата=ДобавитьМесяц(ТекДата,1);
Если ТекДата>КонДата Тогда // упс! проскочили
СчМес=СчМес-1; // кол. месяцев уменьшили на один
ТекДата=ДобавитьМесяц(ТекДата,-1); // а дату вернули на месяц назад
Прервать;
КонецЕсли;
КонецЦикла;
СчДней=КонДата-ТекДата;
Сообщить("Месяцев:"+СчМес+" дней "+СчДней);
КонецПроцедуры
Показать полностью |
c 01.01.08 по 31.03.08 сообщает Месяцев: 2 дней 30
c 01.01.08 по 01.04.08 сообщает Месяцев: 3 дней 0
Вокруг одни ламеры! ;)
c 31.01.08 по 01.02.08 сообщает Месяцев: 0 дней 3 (0/0/3),
но с 31.01.07 по 01.02.07 сообщает Месяцев: 0 дней 4 (0/0/4)
Откуда день взялся (точнее, 2-3 дня)? Похоже на машину времени... ;)
Лучше уж написать так:
c 31.01.08 по 01.02.08 сообщает Месяцев: 0 дней 3 (0/0/3),
но с 31.01.07 по 01.02.07 сообщает Месяцев: 0 дней 4 (0/0/4)
Откуда день взялся (точнее, 2-3 дня)? Похоже на машину времени... ;)
Лучше уж написать так:
Код |
---|
Процедура Сформировать()
СчМес = 0;
Пока ДобавитьМесяц(НачДата, СчМес + 1) <= КонДата Цикл
СчМес = СчМес + 1;
КонецЦикла;
СчДней = КонДата - ДобавитьМесяц(НачДата, СчМес);
Сообщить("Месяцев:" + СчМес + " дней " + СчДней);
КонецПроцедуры
Показать полностью |
31/01/08 + месяц у всех белых людей равно 28/02/08 для не високосного или 29/02/08 для високосного (как раз в 2008)
А считать месяц 01.01.08 - 31.08.01 та же детская ошибка, как считать, что новый век и новое тысячелетие наступили в 2000-ом году
А считать месяц 01.01.08 - 31.08.01 та же детская ошибка, как считать, что новый век и новое тысячелетие наступили в 2000-ом году
Сhe Burashka Написал:
-------------------------------------------------------
> вариант poppy компактный, туда только
> день-поправочку ввести - тому, кто как я считает
> что 31.01 - 01.02 = 2 дня
Только ли туда? Странно, но твой алгоритм считает не так как ты... ;)
В свете поста от Shaman100M предлагаю код компактнее:
Но и он имеет недостатки.
Поэтому считаю, что использовать функцию ДобавитьМесяц для решения поставленной задачи = нецелесообразно.
-------------------------------------------------------
> вариант poppy компактный, туда только
> день-поправочку ввести - тому, кто как я считает
> что 31.01 - 01.02 = 2 дня
Только ли туда? Странно, но твой алгоритм считает не так как ты... ;)
В свете поста от Shaman100M предлагаю код компактнее:
Код |
---|
СчЛет=Цел((Число(Формат(КонДата, "ДГГГГММДД"))-Число(Формат(НачДата, "ДГГГГММДД")))/10000);
СчМес=Цел((Число(Формат(КонДата, "ДГГГГММДД"))-Число(Формат(НачДата, "ДГГГГММДД")))/100) - СчЛет*100;
СчДней=КонДата-ДобавитьМесяц(НачДата,СчМес+СчЛет*12);
Сообщить("Лет: " + СчЛет + " месяцев:"+СчМес+" дней "+СчДней);
Показать полностью |
Но и он имеет недостатки.
Поэтому считаю, что использовать функцию ДобавитьМесяц для решения поставленной задачи = нецелесообразно.
Код |
---|
Процедура Сформировать()
Лет=0; Месяцев=0; Дней=0;
ДатаТек=Дата1;
Пока ДобавитьМесяц(ДатаТек,1) <= Дата2 Цикл
ДатаТек=ДобавитьМесяц(ДатаТек,1);
Месяцев=Месяцев+1;
Если Месяцев=12 Тогда
Лет=Лет+1; Месяцев=0;
КонецЕсли;
КонецЦикла;
Дней=Дата2 - ДатаТек;
КонецПроцедуры
Показать полностью |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот