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

Подскажите пожайлуста.
1 Outlander
 
26.05.04
13:59
А где ты его дальше будешь использовать (17:32)?
2 Arhitektor
 
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" + Строка(Сек);
   Иначе
       Стр = Стр + Строка(Сек);
   КонецЕсли;
   
   Возврат Стр;
КонецФункции
3 Arhitektor
 
26.05.04
14:07
опс-с-с ошибочка
вместо
Сек = Сек%60;
Ми = Ми + 1;
надо писать
Сек = Сек%60;
Ми = Ми + цел(Сек/60);

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

сорри
4 Outlander
 
26.05.04
14:07
А вообще-то по отдельности складывать часы, минуты, секунды - как числа.
5 OctoberHammer
 
26.05.04
14:09
2(4) Как числа в какой системе исчесления? То есть, если сложить 30 минут и 40, то получим сколько - 70 минут или 1 час 10 минут?
6 Arhitektor
 
26.05.04
14:13
В (2) работа идет в десятичной с/с
7 Outlander
 
26.05.04
14:16
(5) Естественно, с добавлением единички в старшем разряде (часах, минутах).
Не думаю, что элементарные вещи нужно разжевывать как школьнику.
8 OctoberHammer
 
26.05.04
14:18
2(7) Тогда лажа. У архитектора алгоритм лучше.
зачем складывать три пары чисел, и в общем случае еще гемороится с двумя лишними разрядами, если можно сложить две пары.
9 Arhitektor
 
26.05.04
14:20
просто я работал раньше учителем: там и не такое приходилось разжевывать :(
10 OctoberHammer
 
26.05.04
14:38
ффу блин, вчитался в алгоритм Архитектора. Тоже не красиво
красиво, это когда первеодим оба числа в секунды, складываем, полученный результат переводим в часы, минуты, секунды.
Не принципиально... так, из чувства противоречия спорю
11 Arhitektor
 
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,А+Б);
Сообщить(""+чч+":"+мм);
13 OctoberHammer
 
26.05.04
15:09
(12)
Да, так гораздо красивее. Теперь мой эстетизм удовлетворен.
Чтоб ты жил долго и не болел. :)))
14 Lucky
 
26.05.04
15:16
To  Arhitektor - Огромное спасибо, такого понятного ответа еще никогда в жизни не получал %-)
15 Рупор абсурда
 
26.05.04
15:17
Эх! Придерусь сам ...
(12) А последнюю строчечку лучше заменить на:
Сообщить(?(чч<10,"0","")+чч+?(мм<10,":0",":")+мм);
16 PilotBrian
 
26.05.04
15:20
Lucky, извени за OFF.
Рупор здорово, давненько я тебя не достовал :) Если будет желание зайди в мою ветку. 1с. Изменение документа при отмене проводки
17 Roman001
 
27.05.04
06:45
Складывать еще ниче, гораздо интереснее время вычитать :)
18 Outlander
 
27.05.04
09:47
Да, (12) - красиво и лаконично.
19 Композитор
 
27.05.04
09:54
(13) Хорошее словечко "эстетизм". Добавил в свой словарь идиотизмов.
20 Dozer
 
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)));
       КонецЕсли;
   КонецЕсли;

КонецПроцедуры    // глРазобратьРазностьДат
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший