|
Подсчет количества часов между двумя значениями времени | ☑ | ||
---|---|---|---|---|
0
LivingStar
01.11.13
✎
10:14
|
Есть например, 2 значения времени:
7:57 21:15 как подсчитать между ними количество часов? Или для этого нужны значения не времени а дат со временем? |
|||
1
DimVad
01.11.13
✎
10:16
|
(0) А они в каком виде, в строковом что ли ? Тогда получить дату со временем.
|
|||
2
zak555
01.11.13
✎
10:17
|
РАЗНОСТЬДАТ ?
|
|||
3
Галахад
гуру
01.11.13
✎
10:17
|
Есть такое математическое действие - "Вычитание"
|
|||
4
1dvd
01.11.13
✎
10:19
|
(3) и деление на 60 ещё :)
|
|||
5
1dvd
01.11.13
✎
10:19
|
(0) в 8.х нет типа "Время"
|
|||
6
FoxFox
01.11.13
✎
10:21
|
Перевести в минуты, вычесть и поделить на 60
|
|||
7
User_Agronom
01.11.13
✎
10:21
|
(4) Деление на 3600 - если быть точным.
Да, (5) совершенно верно |
|||
8
Wobland
01.11.13
✎
10:22
|
(6) тогда уж перевести в часы
|
|||
9
User_Agronom
01.11.13
✎
10:22
|
Стаж 8 лет. Мдя...
|
|||
10
Wobland
01.11.13
✎
10:24
|
(9) пятница
|
|||
11
Wobland
01.11.13
✎
10:25
|
это хорошо ещё, что автор представляет две даты одного дня. разница в часах между сегодня и 1986м годом, должно быть введёт его в ступор
|
|||
12
FoxFox
01.11.13
✎
10:26
|
(8) ну можно и в часы, разницы нет, тогда будут дроби вычитаться :)
|
|||
13
pumbaEO
01.11.13
✎
10:26
|
Время из одного часового пояса?
|
|||
14
Wobland
01.11.13
✎
10:27
|
(12) ээ... я имел в виду перевод разности в часы ;)
|
|||
15
1dvd
01.11.13
✎
10:28
|
(13) + С одной планеты?
|
|||
16
BICO
01.11.13
✎
10:28
|
Пятницо же !!
|
|||
17
LivingStar
01.11.13
✎
10:29
|
(13) да из одного
|
|||
18
Wobland
01.11.13
✎
10:29
|
(17) что надумал?
|
|||
19
LivingStar
01.11.13
✎
10:38
|
(18) Да вот берусь, думаю даты со временем нужны, и использовать
(2) Эта функция в запросе что ли применяется? |
|||
20
LivingStar
01.11.13
✎
10:39
|
(2) мне то в коде нужно
|
|||
21
alexiv79
01.11.13
✎
10:44
|
(19) Вообще ДатаКонца - датаНачала = разность в секундах. А там дальше сам смотри - можно Цел(Разность/3600) - тогда округляешь до полных часов, если в большую сторону тогда Если Цел(Разность/3600) < Разность/3600 Тогда
КолЧасов = Цел(Разность/3600); КонецЕсли; Это в большую сторону 4.5 часа станут 5 часов |
|||
22
alexiv79
01.11.13
✎
10:45
|
+(21)Вот так надо: КолЧасов = Цел(Разность/3600)+1
|
|||
23
Wobland
01.11.13
✎
10:46
|
(22) хочешь сказать, что между полуднем и полуднем 1 час?
|
|||
24
LivingStar
01.11.13
✎
10:47
|
(21) нифига сибе!!!
|
|||
25
alexiv79
01.11.13
✎
10:48
|
(23) Нет, не хочу-непонятно, откуда такой вывод?
|
|||
26
Wobland
01.11.13
✎
10:48
|
(24) это арифметика, сынок
(25) а плохо читал |
|||
27
alexiv79
01.11.13
✎
10:48
|
12-12 = 0. Цел(0) не меньше 0
|
|||
28
alexiv79
01.11.13
✎
10:50
|
(24) ты меня пугаешь. А это 8 лет назад впервый раз писал когда только за 7.7 сел.
|
|||
29
LivingStar
01.11.13
✎
10:58
|
ДатаКонца - датаНачала = разность
Если Цел(Разность/3600) < Разность/3600 Тогда КолЧасов = Цел(Разность/3600)+1; КонецЕсли; так что ли? |
|||
30
Wobland
01.11.13
✎
11:03
|
(29) нет
|
|||
31
Serg_1960
01.11.13
✎
11:23
|
Разность = Макс(ДатаКонца, ДатаНачала) - Мин(ДатаКонца, ДатаНачала);
КолЧасов = Цел(Разность*(1/3600)); КолМинут = Цел((Разность-КолЧасов)*... КолСекунд = ... Тяпница удалась :) |
|||
32
LivingStar
01.11.13
✎
11:42
|
(31) Спасибо, нужно попробовать!
|
|||
33
LivingStar
05.11.13
✎
05:53
|
(31) А что не дописанно по минутам у вас там не понятно?
(21) ДатаКонца, ДатаНачала - это у вас какие типы данных? |
|||
34
1dvd
05.11.13
✎
08:14
|
(33) ну, пораскинь остатками моска.
Разность = Макс(ДатаКонца, ДатаНачала) - Мин(ДатаКонца, ДатаНачала); КолЧасов = Цел(Разность / 3600); КолМинут = Цел((Разность % 3600) / 60); КолСекунд = Разность % 60; |
|||
35
LivingStar
05.11.13
✎
08:42
|
(34) спасибо!
Результаты первого тестирования: ДатаНачала: 02.10.2013 14:29:02 ДатаКонца0: 2.10.2013 0:56:22 разность: 48 760 часы: 13 минуты: 32 секунды: 40 Как думаете верны ли полученные данные? Поку думаю продолжать тестирование... |
|||
36
1dvd
05.11.13
✎
08:50
|
(35) проверь хорошенько. Вдруг холодная машина ошибается...
|
|||
37
Wobland
05.11.13
✎
08:51
|
(35) голосовалку!
|
|||
38
Serg_1960
05.11.13
✎
09:06
|
(31) *
В первой строке - "защита от дурака". Даты произвольные и далеко не факт, что первая дата ранее второй. Во второй строке - защита от случая, когда даты - одинаковые. В третьей строке - пятничная шутка :) Сам посуди: что будет если от секунд отнять количество часов? |
|||
39
1dvd
05.11.13
✎
09:19
|
(38) >>Во второй строке - защита от случая, когда даты - одинаковые
ага. ага. не отмазывайся - не военкомат |
|||
40
Ненавижу 1С
гуру
05.11.13
✎
09:21
|
какая то нереальная жесть в формуле:
КолЧасов = Цел(Разность*(1/3600)); |
|||
41
LivingStar
05.11.13
✎
10:29
|
Ну вот очередные примеры, я думаю не корректно считает !!!
Разность = Макс(СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента, СтрПромеж.ДатаПоявленияУПервогоКонтрагента) - Мин(СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента, СтрПромеж.ДатаПоявленияУПервогоКонтрагента); КолЧасов = Цел(Разность / 3600); КолМинут = Цел((Разность % 3600) / 60); КолСекунд = Разность % 60; СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента 03.10.2013 2:14:47 СтрПромеж.ДатаПоявленияУПервогоКонтрагента 03.10.2013 1:32:38 Разность 2 529 КолЧасов 0 КолМинут 42 КолСекунд 9 СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента 04.10.2013 8:31:56 СтрПромеж.ДатаПоявленияУПервогоКонтрагента 04.10.2013 2:01:46 Разность 23 410 КолЧасов 6 КолМинут 30 КолСекунд 10 СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента 07.10.2013 11:39:00 СтрПромеж.ДатаПоявленияУПервогоКонтрагента 07.10.2013 1:56:35 Разность 34 945 КолЧасов 9 КолМинут 42 КолСекунд 25 СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента 08.10.2013 6:25:33 СтрПромеж.ДатаПоявленияУПервогоКонтрагента 08.10.2013 1:12:42 Разность 18 771 КолЧасов 5 КолМинут 12 КолСекунд 51 |
|||
42
Ненавижу 1С
гуру
05.11.13
✎
10:31
|
(41) почему ты так решил?
|
|||
43
LivingStar
05.11.13
✎
10:32
|
(41)
в первом примере не понятно, похоже на круговой проход времени во втором примере видно, что больше 6 часов в любом случае, если бы это были разные дни, но там один и тот же день, так что тоже не понятно... вижу что все примеры не корректные, там везде меняется день |
|||
44
LivingStar
05.11.13
✎
10:34
|
(42) извиняюсь, это я не так считал.... похоже считает, но не совсем точно да?
|
|||
45
Ненавижу 1С
гуру
05.11.13
✎
10:34
|
(44) нет
|
|||
46
LivingStar
05.11.13
✎
10:35
|
(42) ну или нормально да? нужно больше тестирования проводить и более точно рассматривать результат
(45) "нет", это вы про что? |
|||
47
1dvd
05.11.13
✎
10:36
|
(46) "нет" - это значит, что считает точно
|
|||
48
Ненавижу 1С
гуру
05.11.13
✎
10:37
|
(46) нужно мозг включить
|
|||
49
LivingStar
05.11.13
✎
10:37
|
(47) Ясно!!! Спасибо за формулу, продолжаю тестирование!!! Я вот такую находил функцию, но не обратил сразу внимание что часов то там нет!!!
Разность = Макс(СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента, СтрПромеж.ДатаПоявленияУПервогоКонтрагента) - Мин(СтрПромеж.ДатаПоявленияУПоследнегоКонтрагента, СтрПромеж.ДатаПоявленияУПервогоКонтрагента); КолЧасов = Цел(Разность / 3600); КолМинут = Цел((Разность % 3600) / 60); КолСекунд = Разность % 60; |
|||
50
LivingStar
05.11.13
✎
10:39
|
(49+) Опечатался, вот такую:
?// №12 Процедура вычисляет количество лет, месяцев и дней между двумя датами // // Параметры // Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату) // Дата2 – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа) // Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) // Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) // Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2) Процедура РазобратьРазностьДат(Дата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)))); КонецЕсли; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |