![]() |
![]() |
![]() |
|
Как сложить время? Например 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))); КонецЕсли; КонецЕсли; КонецПроцедуры // глРазобратьРазностьДат |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |