• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

смена формата отображения разницы дат

k85

Lotus Team
11.10.2011
260
1
BIT
0
у меня есть две
Date1 - дата создания
Time1 - время создания

Date2 - дата записи в журнал
Time2 - время записи в журнал

и время разницы между записью в журнал и созданием, измеряется в часах
Код:
@Round(((Date2 - Date1) + (Time2 - Time1)) / 3600 ; 0,01)
отображается 24,14 например . а хотелось бы получить результат в виде "24часа 10мин"
можно ли как-то разницу отобразить в читаемом виде?
 

savl

Lotus Team
28.10.2011
2 608
313
BIT
278
На знаю как на формулах, но на скрипте вот так можно.
Можно попробовать на формулы просто переписать.

*******
Будет запись вида: "02:14:36" (чч:мм:сс)

allTime - это Разниц между двумя датами, NotesDateTime.TimeDefference(NotesDateTime)

Visual Basic:
Function getTimeTextString(allTime As Long) As String
    On Error Goto handler
    
    Dim allh As Long
    Dim allm As Long
    Dim alls As Long
    
    allh = 0
    allm = 0
    alls = 0
    
    allh = (allTime)\3600
    allm = (allTime - (allh*3600))\60
    alls = (allTime - (allh*3600) - (allm*60))
    
    getTimeTextString = allh & {:} & allm & {:} & alls
    
endh:
    Exit Function
handler:
    Error Err, {getTimeTextString, line: } & Erl & {, Error: (} & Err() & {)} & chr(10) & Error$
End Function
 
  • Нравится
Реакции: VladSh и k85

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
258
если глобально смотреть на вопрос ;)
есть ICU для отображения с буковками...
вот только в домине оно протухшее, а степень зависит от версии домины/нотусни :)
и Calendar класс для манипуляций с датами (через LS2J например)
 
  • Нравится
Реакции: k85

VladSh

начинающий
Lotus Team
11.12.2009
1 791
157
BIT
123
есть например 2,45 , но это не 2 часа и 45 мин, а как это перевести в минуты я пока не могу понять
45 - это минуты и секунды в десятичном представлении (назовём их md).

Пропорция будет выглядеть как-то так:

100 - 60
md - mm

mm = md * 60 / 100

Целая часть из mm - это количество минут.

Дробная часть из mm - это секунды в десятичном представлении (назовём их sd), которые точно также можно перевести во время:

100 - 60
sd - ss

ss = sd * 60 / 100.

ss - количество секунд, которое можно просто округлить алгоритмом round5 до целого числа.

Вроде так. Но я не уверен))
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Код:
@If(field1=null | field2=null; @Return(""); "");
seconds := field1-field2;
hours := @Integer(seconds/3600);
minutes := @Modulo(@Integer(seconds/60); 60);
output := @Right("00" + @Text(hours); 2) + ":" + @Right("00" + @Text(minutes); 2);
@setfield("field3"; output);
@Command([ViewRefreshFields]);
""
Подсмотрено тут
 
  • Нравится
Реакции: k85

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Ещё вариант - возвращает количество дней между датами
Код:
@Abs(@Integer((Date2- Date1) / (86400)))
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
Код:
@If(field1=null | field2=null; @Return(""); "");
seconds := field1-field2;
hours := @Integer(seconds/3600);
minutes := @Modulo(@Integer(seconds/60); 60);
output := @Right("00" + @Text(hours); 2) + ":" + @Right("00" + @Text(minutes); 2);
@setfield("field3"; output);
@Command([ViewRefreshFields]);
""
Подсмотрено тут
оо, так классно вышло, но вот все равно не пойму
Код:
field0:= @Round((Date2 - Date1)  / 3600; 0,1) ;
field1:=@If (   Time2 !=""  ;   Time2  ; null );
field2:=@If (   Time1 !=""  ;   Time1  ; null );

@If(field1=null | field2=null; @Return(""); "");

seconds := field1-field2;
hours0 := @Integer(seconds/3600);
hours := hours0+field0;
minutes := @Modulo(@Integer(seconds/60); 60);
output := @Right("00" + @Text(hours); 2) + ":" + @Right("00" + @Text(minutes); 2);
output

Date2- 03.10.2023 / Time2- 15:08:47
Date1- 02.10.2023 / Time1- 23:20:00

почему разница 16:11 ? должно ж быть 15:49

если
Date2- 03.10.2023 / Time2- 15:08:47
Date1- 03.10.2023 / Time1- 03:20:00

то выйдет 11:48

и если разница больше суток
Date2- 03.10.2023 / Time2- 15:08:47
Date1- 02.10.2023 / Time1- 14:20:00

то выйдет 24:48
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
16:11 может из-за округления так получается

Тут получается 16 часов 8 минут 47 секунд

Другой вариант говорит

  • 0 года/лет, 0 мес., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 мес., 0 нед., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 нед., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 сут., 16 час., 8 мин., 47 сек.
  • Или 16 час., 8 мин., 47 сек.
  • Или 968 мин., 47 сек.
  • Или 58127 сек.

и если разница больше суток
Date2- 03.10.2023 / Time2- 15:08:47
Date1- 02.10.2023 / Time1- 14:20:00
то выйдет 24:48
если килограммы складывать с килограммами автоматически тонны не получатся, нужно самому преобразовывать. Если output больше 24 добавить преобразование к дням... дальше можно добавлять недели, месяцы, года и т.д. и надо ещё помнить про февраль, високосные года и перевод времени (в некоторых странах). Короче, это всё непростой вопрос.
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
16:11 может из-за округления так получается

Тут получается 16 часов 8 минут 47 секунд

Другой вариант говорит

  • 0 года/лет, 0 мес., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 мес., 0 нед., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 нед., 0 сут., 16 час., 8 мин., 47 сек.
  • Или 0 сут., 16 час., 8 мин., 47 сек.
  • Или 16 час., 8 мин., 47 сек.
  • Или 968 мин., 47 сек.
  • Или 58127 сек.


если килограммы складывать с килограммами автоматически тонны не получатся, нужно самому преобразовывать. Если output больше 24 добавить преобразование к дням... дальше можно добавлять недели, месяцы, года и т.д. и надо ещё помнить про февраль, високосные года и перевод времени (в некоторых странах). Короче, это всё непростой вопрос.
странно, но реально так на всех калькуляторах времени считает
 

VladSh

начинающий
Lotus Team
11.12.2009
1 791
157
BIT
123
Код:
@Round(((Date2 - Date1) + (Time2 - Time1)) / 3600 ; 0,01)
А что, отнимать сначала даты друг от друга, а потом время, и потом складывать результат, разве корректно? Мне кажется надо получить даты с временем и тогда уже брать разницу.
 
  • Нравится
Реакции: k85

k85

Lotus Team
11.10.2011
260
1
BIT
0
А что, отнимать сначала даты друг от друга, а потом время, и потом складывать результат, разве корректно? Мне кажется надо получить даты с временем и тогда уже брать разницу.
не могу найти как дату и время соединить , чтобы потом отнимать
 

k85

Lotus Team
11.10.2011
260
1
BIT
0
А что, отнимать сначала даты друг от друга, а потом время, и потом складывать результат, разве корректно? Мне кажется надо получить даты с временем и тогда уже брать разницу.
точно, так вышло, пока тестирую разные комбинации, но вроде все правильно
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!