Вход | Регистрация


1С:Предприятие ::

Метки:дата и время

Как сложить время? Например 12:26 + 05:06 = 17:32

Я
   Lucky
 
26.05.04 - 13:22
Собственно а можно ли?
Когда складываю ТекущееВремя()+число то получаю=ВремяЧисло
Например  12:26  + 05:06 = 12,260506

Подскажите пожайлуста.
 
 
   Outlander
1 - 26.05.04 - 13:59
А где ты его дальше будешь использовать (17:32)?
   Arhitektor
 
2 - 26.05.04 - 14:05
Не очень красиво, но надеюсь понятно...

//*******************************************

Функция Выполнить()
    Перем Час, Ми, Сек;
    
    ТекущееВремя(Час,Ми,Сек);//возвращает три переменные типа строка

    Час = число(Час);
    Ми = число(Ми);
    Сек = число(Сек);
    Сек = Сек + 125;
    Ми = Ми+123;
    Час = Час + 122;
               
    Если Сек/60 > 0 Тогда
          Сек = Сек%60;
          Ми = Ми + 1;
    КонецЕсли;
      
    Если Ми/60 > 0 Тогда
          Ми = Ми%60;
          Час = Час + 1;
    КонецЕсли;

    Если Час/24 > 0 Тогда
        Час = Час%24;
    КонецЕсли;
    
    Стр = "";
    
    Если Час < 10 Тогда
        Стр = "0" + Строка(Час);
    Иначе
        Стр = Строка(Час);
    КонецЕсли;
    
    Стр = Стр + ":";
    
    Если Ми < 10 Тогда
        Стр = Стр + "0" + Строка(Ми);
    Иначе
        Стр = Стр + Строка(Ми);
    КонецЕсли;      
    
    Стр = Стр + ":";
               
    Если Сек < 10 Тогда
        Стр = Стр + "0" + Строка(Сек);
    Иначе
        Стр = Стр + Строка(Сек);
    КонецЕсли;
    
    Возврат Стр;
КонецФункции
   Arhitektor
 
3 - 26.05.04 - 14:07
опс-с-с ошибочка
вместо
Сек = Сек%60; 
Ми = Ми + 1;
надо писать
Сек = Сек%60; 
Ми = Ми + цел(Сек/60);

аналогично для Ми и Час

сорри
   Outlander
4 - 26.05.04 - 14:07
А вообще-то по отдельности складывать часы, минуты, секунды - как числа.
   OctoberHammer
 
5 - 26.05.04 - 14:09
2(4) Как числа в какой системе исчесления? То есть, если сложить 30 минут и 40, то получим сколько - 70 минут или 1 час 10 минут?
   Arhitektor
 
6 - 26.05.04 - 14:13
В (2) работа идет в десятичной с/с
   Outlander
7 - 26.05.04 - 14:16
(5) Естественно, с добавлением единички в старшем разряде (часах, минутах).
Не думаю, что элементарные вещи нужно разжевывать как школьнику.
   OctoberHammer
 
8 - 26.05.04 - 14:18
2(7) Тогда лажа. У архитектора алгоритм лучше.
зачем складывать три пары чисел, и в общем случае еще гемороится с двумя лишними разрядами, если можно сложить две пары.
   Arhitektor
 
9 - 26.05.04 - 14:20
просто я работал раньше учителем: там и не такое приходилось разжевывать :(
   OctoberHammer
 
10 - 26.05.04 - 14:38
ффу блин, вчитался в алгоритм Архитектора. Тоже не красиво
красиво, это когда первеодим оба числа в секунды, складываем, полученный результат переводим в часы, минуты, секунды.
Не принципиально... так, из чувства противоречия спорю
 
 
   Arhitektor
 
11 - 26.05.04 - 14:43
:)
   Рупор абсурда
 
12 - 26.05.04 - 15:03
12:26 + 05:06 = 17:32 
 
Функция Время(чч,мм,сс,Время=0)
  Если Время=0 Тогда Возврат сс+мм*60+чч*3600 КонецЕсли;
  чч=Цел(Время/3600);
  мм=Цел((Время%3600)/60);
  сс=(Время%3600)%60;
  Возврат Время;
КонецФункции

А=Время(12,26,0);
Б=Время(5,6,0);
чч=0; мм=0;
Время(чч,мм,0,А+Б);
Сообщить(""+чч+":"+мм);
   OctoberHammer
 
13 - 26.05.04 - 15:09
(12)
Да, так гораздо красивее. Теперь мой эстетизм удовлетворен.
Чтоб ты жил долго и не болел. :)))
   Lucky
 
14 - 26.05.04 - 15:16
To  Arhitektor - Огромное спасибо, такого понятного ответа еще никогда в жизни не получал %-)
   Рупор абсурда
 
15 - 26.05.04 - 15:17
Эх! Придерусь сам ...
(12) А последнюю строчечку лучше заменить на:
Сообщить(?(чч<10,"0","")+чч+?(мм<10,":0",":")+мм);
   PilotBrian
 
16 - 26.05.04 - 15:20
Lucky, извени за OFF.
Рупор здорово, давненько я тебя не достовал :) Если будет желание зайди в мою ветку. 1с. Изменение документа при отмене проводки
   Roman001
17 - 27.05.04 - 06:45
Складывать еще ниче, гораздо интереснее время вычитать :)
   Outlander
18 - 27.05.04 - 09:47
Да, (12) - красиво и лаконично.
   Композитор
 
19 - 27.05.04 - 09:54
(13) Хорошее словечко "эстетизм". Добавил в свой словарь идиотизмов.
   Dozer
20 - 27.05.04 - 10:36
а как быть с датами а не со временем.
как допустим посчитать сколько дней месяцев и годов между 27.05.04 и 01.06.03
заранее спасиба
   МАХ
21 - 31.05.04 - 10:09
для (20) фрагмент глобального модуля ЗиК (1С, ты всегда думаешь о нас...)
//******************************************************************************
//    глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней)

//
//    Параметры:

//        Дата1    - первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
//        Дата2    - вторая дата (ранняя дата, с нее начинается "течение" стажа)

//        Лет        - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
//        Месяцев    - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)

//        Дней    - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//

//    Описание:
//        Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней

//        между двумя датами (Дата1-Дата2)
//

       // алгоритм Пенсионного фонда

       //Мк = ДатаМесяц(Дата1);

       //Гк = ДатаГод(Дата1);

       //Если ДатаЧисло(Дата1) - ДатаЧисло(Дата2) < 0 Тогда

       //    Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2) + 30;

       //    Мк = Мк - 1;

       //Иначе

       //    Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2);

       //КонецЕсли;

       //Если Мк - ДатаМесяц(Дата2) < 0 Тогда

       //    Месяцев = Мк - ДатаМесяц(Дата2) + 12;

       //    Гк = Гк - 1;

       //Иначе

       //    Месяцев = Мк - ДатаМесяц(Дата2);

       //КонецЕсли;

       //Лет    = Гк-ДатаГод(Дата2);

       //Дней = Дней + 1;

       //Если Дней >= 30 Тогда

       //    Дней = 0;

       //    Месяцев = Месяцев + 1;

       //КонецЕсли;

       //Если Месяцев = 12 Тогда

       //    Месяцев = 0;

       //    Лет    = Лет + 1

       //КонецЕсли;

Процедура глРазобратьРазностьДат(Знач Дата1,Знач Дата2,Лет=0,Месяцев=0,Дней=0) Экспорт

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

        Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней) Тогда
            Дней = Дней + (КонМесяца(Дата2)-НачМесяца(Дата2)) - (КонМесяца(ДобавитьМесяц(Дата1,-1))-НачМесяца(ДобавитьМесяц(Дата1,-1)));
        КонецЕсли;
    КонецЕсли;

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



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует