Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 10:41

Логические операции

Автор katykon, 10 апр 2019, 11:06

0 Пользователей и 1 гость просматривают эту тему.

katykon

Добрый день! Подскажите пожалуйста как вывести от одной даты до другой «прошло 2 месяца, 11 дней, 5 часов и 48 минут». Писала  инструкции, но не как не могу понять как вывести 2 месяца: дни,  часы и минуты получились, а месяцы вывела вписав их типом строкой. Спасибо!

Мое Решение:

Дата1 = НачалоДня(ТекущаяДата());
  Дата2 = Дата(Год(ТекущаяДата()), 6, 22, 5, 48,0);
Интервал = Дата2-Дата1;
                   
                      // Разделить На дни, 24*3600
                       Дни = Цел(Интервал/(24*3600));
                       ОсталосьСек = Интервал % (24*3600);
                       
                        //Разделить на часы,3600
                          Часы = Цел(ОсталосьСек /3600);
                          ОсталосьСекунд = ОсталосьСек % 3600;
                               
                          //Разделитьна минутЫ, 60
                          Минуты = Цел(ОсталосьСекунд /60);
                               
                          //Секунды
                          Секунды = ОсталосьСекунд % 60;
                               
                          //месяцы
                                Месяц1= 30;
                                Месяц2 = 31;
                                ОстатокДней = Дни-(Месяц1 + Месяц2);

                      Результат = "Прошло 2 месяца" + Строка(ОстатокДней) + " дней, " + Строка(Часы) +
                      " часов, " + Строка(Минуты) + " минут, " + Строка(Секунды) + " секунд.";
Подскажите пожалуйста, как же вывести Месяцы?

wise

(0) Месяц(Дата2)-Месяц(Дата1)
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

alex0402

Цитата: katykon от 10 апр 2019, 11:06Подскажите пожалуйста, как же вывести Месяцы?

Сообщить(Строка('00010101' + (ТекущаяДата()-НачалоГода(ТекущаяДата()))));
из строки вырезать и расписать...
Спасибо за Сказать спасибо

AIFrame

ХЗ, конечно, правильно ли я замутил, лень высчитывать.
Процедура ПоказатьРазностьДатНажатие(Элемент)
Если НЕ ЗначениеЗаполнено(ДатаНачала) ИЛИ НЕ ЗначениеЗаполнено(ДатаКонца) Тогда
ЭлементыФормы.Н_РазностьСтрокой.Заголовок = "Не указана дата";
ЭлементыФормы.Н_РазностьСтрокой.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла;
Возврат;
КонецЕсли;
ЭлементыФормы.Н_РазностьСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;

РазностьДат = ДатаКонца - ДатаНачала;
Мод = ?(РазностьДат < 0, -1, 1);  // Модификатор
// Если Мод > 0 - значит ДатаКонца - будущее, иначе - прошлое и считать будем в обратную сторону.

Лет = 0;
Месяцев = 0;
Дней = 0;

Если Мод > 0 Тогда
РазобратьРазностьДат(НачалоДня(ДатаКонца), НачалоДня(ДатаНачала), Лет, Месяцев, Дней);
Иначе
РазобратьРазностьДат(НачалоДня(ДатаНачала), НачалоДня(ДатаКонца), Лет, Месяцев, Дней);
КонецЕсли;
Дней = Дней - 1;

Если Мод > 0 Тогда
РазницаЧМС = (КонецДня(ДатаНачала)+1 - ДатаНачала) + (ДатаКонца - НачалоДня(ДатаКонца));
Иначе
РазницаЧМС = (КонецДня(ДатаКонца)+1 - ДатаКонца) + (ДатаНачала - НачалоДня(ДатаНачала));
КонецЕсли;

Если РазницаЧМС >= 86400 Тогда
Дней = Дней + 1;
    РазницаЧМС = РазницаЧМС - 86400;
КонецЕсли;
Часов = ?(РазницаЧМС >= 3600, Цел(РазницаЧМС / 3600), 0);
РазницаЧМС = РазницаЧМС - Часов * 3600;

Минут = ?(РазницаЧМС >= 60, Цел(РазницаЧМС / 60), 0);
РазницаЧМС = РазницаЧМС - Минут * 60;
Секунд = РазницаЧМС;

СО = Новый Структура; // Структура ответа
СО.Вставить("Префикс", ?(Мод < 0, "Прошло", "Наступит через"));
СО.Вставить("ЗначЛет", ?(Лет > 0, " " + Лет + " лет", ""));
СО.Вставить("ЗначМесяцев", ?(Месяцев > 0, " " + Месяцев + " месяцев", ""));
СО.Вставить("ЗначДней", ?(Дней > 0, " " + Дней + " дней", ""));
СО.Вставить("ЗначЧасов", ?(Часов > 0, " " + Часов + " часов", ""));
СО.Вставить("ЗначМинут", ?(Минут > 0, " " + Минут + " минут", ""));
СО.Вставить("ЗначСекунд", ?(Секунд > 0, " " + Секунд + " секунд", ""));

СтрокаОтвета = "" + СО.Префикс + СО.ЗначЛет + СО.ЗначМесяцев + СО.ЗначДней + СО.ЗначЧасов + СО.ЗначМинут + СО.ЗначСекунд;
ЭлементыФормы.Н_РазностьСтрокой.Заголовок = СтрокаОтвета;

КонецПроцедуры

Процедура РазобратьРазностьДат(Дата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))));
        КонецЕсли;
       
    КонецЕсли;

КонецПроцедуры   // РазобратьРазностьДат

РазобратьРазностьДат - из типовой ЗП.


katykon

Спасибо !!!!Оказалось так легко!!!!!:nhsrm:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск