Имя: Пароль:
1C
1С v8
Получить время из даты
,
0 dizpers
 
22.05.12
18:03
Есть форма. На ней есть поле ввода даты. Есть реквизит дока связанный с этим полем. Тип данных у этого реквизита Дата, состав даты Время.

В коде надо расчитать разницу в минутах между текущим временем и значением в реквизите.

Проблема в том что текущая дата будет формата "2012 22.05 21:11:36", а время в реквизите формата "0001 01.01 23:20:14", то есть просто вычесть две даты не получится, так как года разные.

Как можно решить проблему?
1 AlexNew
 
22.05.12
18:06
И?
2 Wobland
 
22.05.12
18:07
добавь к ней НачалоДня(ТекущаяДата())
3 dizpers
 
22.05.12
18:07
как привести текущую дату к году 0001 месяцу 01 и числу 01, чтобы можно было адекватно вычетать?
4 dizpers
 
22.05.12
18:08
(3) к (1)
5 IamAlexy
 
22.05.12
18:08
(0) запросто можно.

время это 01.01.0001 + время

соответственно прибавь к началу дня то время что у тебя заполнено и получишь время в этом дне

разница с контрольной датой - соответтсвенно тебе даст разницу секунд
ну и далее как правильный 1Сник ты обязан посчиатать количество дней и непременно через умножение 24*60*60
6 PR
 
22.05.12
18:08
(3) Вычесть из нее начало текущего дня.
7 Renat11111
 
22.05.12
18:09
(3) открыть СП и почитать про функции работы с датой
8 AlexNew
 
22.05.12
18:14
(7) Это не наш метод.
9 dizpers
 
22.05.12
18:17
Что-то не получается. В коде ниже переменная ВремяОкончания - реквизит дока типа данных Дата, состав даты - время.

ТекущаяДата() - ВремяОкончания + НачалоДня(ТекущаяДата())    

{(1)}: Преобразование значения к типу Число не может быть выполнено
10 Wobland
 
22.05.12
18:18
ТекущаяДата() - (ВремяОкончания + НачалоДня(ТекущаяДата()))
ваще-то
11 Wobland
 
22.05.12
18:23
а всё это потому, что операция сложения для дат не предусмотрена
12 Serg_1960
 
22.05.12
18:26
ПериодВСекундах = Число(ТекущаяДата() - НачалоДня(ТекущаяДата()) - Число(ВремяОкончания);
ПериодДатаВремя = Дата("00010101") + ПериодВСекундах;
13 Wobland
 
22.05.12
18:27
ВремяОкончания='00010101212700';
ТекДата=ТекущаяДата();
Сообщить(ТекДата-Дата(Год(ТекДата), Месяц(ТекДата), День(ТекДата), Час(ВремяОкончания), Минута(ВремяОкончания), Секунда(ВремяОкончания)));
14 Serg_1960
 
22.05.12
18:27
(12) + Это только пример и ничего более :)
15 Wobland
 
22.05.12
18:30
(12) Преобразование значения к типу Число не может быть выполнено
16 dizpers
 
22.05.12
18:32
(15) и (10) выдает ошибку, пробую (13)
17 dizpers
 
22.05.12
18:33
(13)

ТекущаяДата()-Дата(Год(ТекущаяДата()))    {(1)}: Преобразование значения к типу Дата не может быть выполнено
18 Serg_1960
 
22.05.12
18:33
(15) Упс :)
ПериодВСекундах = Число(ТекущаяДата() - НачалоДня(ТекущаяДата()) - Число(ВремяОкончания - Дата("00010101"));
19 dizpers
 
22.05.12
18:35
(18) работает вроде бы:)
спасибо! =)
20 Wobland
 
22.05.12
18:37
(19) а мне?
21 Wobland
 
22.05.12
18:38
ПериодВСекундах = Число(ТекущаяДата() - НачалоДня(ТекущаяДата()) - Число(ВремяОкончания - Дата("00010101")));
ПериодДатаВремя = Дата("00010101") + ПериодВСекундах;
Сообщить(ПериодДатаВремя);

внезапно 01.01.0001 0:00:00
22 Wobland
 
22.05.12
18:42
(21) а, не, работает. но только в случае если ВремяОкончания меньше текущей даты
23 dizpers
 
22.05.12
18:45
(20) Wobland, и тебе спасибо! Прояснил работу с датами. Я до этого момента понимал только то, что при выполнении операции - или + получаем результат в секундах. А оказалось, что + на даты не распространяется.
24 Wobland
 
22.05.12
18:51
(23) ну дык правильно. 22 мая - 21 мая = один день. а 22 мая + 21 мая = ?
25 dizpers
 
22.05.12
19:35
(24) ну можно было бы также выводить сумму секунд отсчитывая от 00010101000000, хотя там были бы числа порядка сотен миллионов или даже больше, но при этом можно было бы удобно складыва-вычитать даты как числа.