|   |   | 
| 
 | Получить время из даты | ☑ | ||
|---|---|---|---|---|
| 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, хотя там были бы числа порядка сотен миллионов или даже больше, но при этом можно было бы удобно складыва-вычитать даты как числа.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |