Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / вычисление разности между датами / 25 сообщений из 25, страница 1 из 1
18.02.2008, 17:28
    #35139790
Daha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
СКажите, пожалуйста, существует ли функция, вычисляющая разность между датами? и какая?:)
...
Рейтинг: 0 / 0
18.02.2008, 17:35
    #35139814
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
http://docs.intersystems.com/cache20071/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_datediff
или
Код: plaintext
$SYSTEM.SQL.DATEDIFF(datepart,startdate,enddate)
...
Рейтинг: 0 / 0
19.02.2008, 04:18
    #35140472
logist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Если имеется в виду не SQL, а COS, то можно пользоваься арифметическим оператором:

w date1-date2
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.02.2008, 12:18
    #35143901
Daha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
у меня в COS, но если просто d1-d2, то вчисляется только разность между днями, а мне нужно еще и время. Как это можно организовать?:)
...
Рейтинг: 0 / 0
20.02.2008, 14:09
    #35144467
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Тут без колдовства и заклинаний никак не обойтись.

В сутках 24 часа, в часе 60 минут, в минуте 60 секунд. Стало быть

s h=$h,d=$p(h,",",1),t=$p(h,",",2)

И величина d*24*60*60+t будет временем и датой в секундах. Вычислите это выражение для двух дат и сравните.
...
Рейтинг: 0 / 0
20.02.2008, 14:17
    #35144497
Daha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
:) интересное решение, но неужели это единственный возможный вариант?
...
Рейтинг: 0 / 0
20.02.2008, 14:53
    #35144671
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
А что же вас не устраивает в этом варианте?
Если разницу нужно вычислять часто, то можно написать функцию, делов то.
...
Рейтинг: 0 / 0
20.02.2008, 18:44
    #35145572
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
To Daha :

А чем Вас вариант с $SYSTEM.SQL.DATEDIFF не устраивает?
Код: plaintext
1.
2.
3.
4.
>set Date1=$ZDTH("02/20/2008 12:00:00")
>set Date2=$ZDTH("02/21/2008 12:01:13")
>w $SYSTEM.SQL.DATEDIFF("ss",Date1,Date2)
 86473 
...
Рейтинг: 0 / 0
21.02.2008, 05:40
    #35146080
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Я так понял, исходные данные в виде 61047,31215
...
Рейтинг: 0 / 0
21.02.2008, 06:09
    #35146086
logist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Дык они в приведенном примере именно в таком формате

=logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2008, 09:23
    #35146250
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Для "повременной" разницы используем вот такую функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Time(Tim1,Tim2) ; Сколько прошло секунд с $H1 по $H2 
 N dt1,dt2,tm1,tm2,tim
 S Tim2=$G(Tim2,$H)
 S dt1=$P(Tim1,",")
 S dt2=$P(Tim2,",")
 S tm1=$P(Tim1,",", 2 )
 S tm2=$P(Tim2,",", 2 )
 S tim= 86400 *(dt2-dt1)+tm2-tm1
 Q tim
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.02.2008, 12:00
    #35146921
Hampster-Mumpster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Krvsa, для реального мампсера слишком много буков...
Код: plaintext
1.
2.
Time(Tim1,Tim2) ; Сколько прошло секунд с $H1 по $H2
 S Tim2=$G(Tim2,$H)
 Q  86400 *(Tim2-Tim1)+$P(Tim2,",", 2 )-$P(Tim1,",", 2 )
...
Рейтинг: 0 / 0
21.02.2008, 13:37
    #35147410
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Hampster-Mumpster , я боролся за такое написание всю свою жизнь. Код должен быть читабельным и максимально простым...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.02.2008, 14:32
    #35147677
Hampster-Mumpster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Уважаемый krvsa, создавая 5 никому не нужных переменных и выполняя 2 избыточных преобразования данных, можно ли говорить о лучшей читабельности кода?
...
Рейтинг: 0 / 0
21.02.2008, 14:40
    #35147728
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Какой смысл писать свои функции, если можно использовать готовые, которые поставляются с Cache'.
Вариант $SYSTEM.SQL.DATEDIFF самый правильный, по-моему.
В $SYSTEM.SQL , кстати, еще много полезных готовых функций.


Вадим
...
Рейтинг: 0 / 0
21.02.2008, 14:55
    #35147800
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Hampster-Mumpsterможно ли говорить о лучшей читабельности кода?
Можно говорить о чем угодно. Понятие "читабельность" у каждого своя...
...
Рейтинг: 0 / 0
21.02.2008, 14:56
    #35147806
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
VadimFКакой смысл писать свои функции
Они писаны давным давно... Мы их просто применяем...
...
Рейтинг: 0 / 0
21.02.2008, 15:40
    #35148030
Hampster-Mumpster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
О стиле спорить действительно не стоит, а вот о правильности самой формулы... Как насчет перевода часов на летнее время и обратно? Чтобы действительно мерить интервалы времени, надо либо использовать UTC ($zts), либо преобразовывать в UTC перед вычислением ($zutil(193,...)).
...
Рейтинг: 0 / 0
21.02.2008, 15:42
    #35148046
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Hampster-MumpsterКак насчет перевода часов на летнее время и обратно?
В этой функции это не учитывается... Но и задачи такой перед нами не ставилось.

Интересно... А эта
Код: plaintext
$SYSTEM.SQL.DATEDIFF("ss",Date1,Date2)
учитывает перевод часов?
...
Рейтинг: 0 / 0
21.02.2008, 15:45
    #35148057
М_а_й_к
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
VadimFКакой смысл писать свои функции, если можно использовать готовые, которые поставляются с Cache'.
Вариант $SYSTEM.SQL.DATEDIFF самый правильный, по-моему.
В $SYSTEM.SQL , кстати, еще много полезных готовых функций.


Вадим
В уточнении автором было сказано что нужно найти разницу не только дней, но и времени.

Т.е. между датой D1 и D2 прошло: 2 дня 6 часов 37 минут 52 секунды.

Такая готовая функция имеется?
...
Рейтинг: 0 / 0
21.02.2008, 15:49
    #35148072
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
М_а_й_кТакая готовая функция имеется?
Возьми любой из трех последних вариантов (там результат секунды) и получи все, что тебе нужно...
...
Рейтинг: 0 / 0
21.02.2008, 15:55
    #35148103
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
Нам пока хватало "до часов"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Time(Sec,Type) ; Сколько прошло времени
 ; Type= 1  : ЧЧ:ММ
 ; Type= 2  : ММ:СС
 ; Type= 3  : ЧЧ:ММ:СС
 ; Sec=$H или число секунд
 N hour,min,sec
 S Sec=$G(Sec,$H)
 s Type=$G(Type, 1 )
 S:Sec["," Sec=$P(Sec,",", 2 )
 S hour=$TR($J(Sec\ 3600 , 2 )," ", 0 )
 S min=$TR($J(Sec# 3600 \ 60 , 2 )," ", 0 )
 S sec=$TR($J(Sec# 60 , 2 )," ", 0 )
 Q:Type= 1  hour_":"_min
 Q:Type= 2  min_":"_sec
 Q hour_":"_min_":"_sec
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.02.2008, 15:59
    #35148120
М_а_й_к
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
krvsa М_а_й_кТакая готовая функция имеется?
Возьми любой из трех последних вариантов (там результат секунды) и получи все, что тебе нужно...

Это я и так понял :)

Речь идет о готовой стандартной, да еще и без SQL,
версия Cache кстати еще 4.1.6
...
Рейтинг: 0 / 0
21.02.2008, 16:03
    #35148146
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
М_а_й_к VadimFКакой смысл писать свои функции, если можно использовать готовые, которые поставляются с Cache'.
Вариант $SYSTEM.SQL.DATEDIFF самый правильный, по-моему.
В $SYSTEM.SQL , кстати, еще много полезных готовых функций.


Вадим
В уточнении автором было сказано что нужно найти разницу не только дней, но и времени.

Т.е. между датой D1 и D2 прошло: 2 дня 6 часов 37 минут 52 секунды.

Такая готовая функция имеется?

Почитайте описание TIMESTAMPDIFF и DATEDIFF
...
Рейтинг: 0 / 0
22.02.2008, 10:39
    #35149724
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вычисление разности между датами
VadimF , так учитывается ли переход на летнее/зимнее время при использовании
Код: plaintext
$SYSTEM.SQL.DATEDIFF("ss",Date1,Date2)
вопрос так и остается без ответа...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / вычисление разности между датами / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]