Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Вычисление разницы между датами  [new]
MaWr
Member

Откуда:
Сообщений: 133
Valeriu
DAiMor,
А системная функция может нам указать сколько дней
имеется в конкретном выбранном месяце ?

Спасибо.

Проще всего взять первый день следующего месяца и вычесть 1:
 date=$zd($h,3)
 
year=$p(date,"-"),month=$p(date,"-",2)+1
 
s:month=13 month=1,year=year+1
 
lastDay=$p($zd($zdh(year_"-"_month_"-01",3)-1,3),"-",3)
19 авг 14, 08:26    [16460115]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
MaWr,
Спасибо.
19 авг 14, 18:01    [16464305]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Не могу понять как форматируется дата...

CADRE>w $ZDate(53543,4)
06/08/87

Я хочу получить 06/08/1987, т.е. полный год
Что не правильно ?
Спасибо.
20 авг 14, 11:12    [16466812]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
$ZDate 4 параметр yearopt

w $ZDate(53543,4,,4)
06/08/1987
20 авг 14, 11:19    [16466857]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13243
Valeriu, как вариант...
 w $tr("Dd.Mm.VvYy","VvYy-Mm-Dd",$ZD(53543,3))
20 авг 14, 11:23    [16466883]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
DAiMor,krvsa,

Спасибо !
20 авг 14, 11:25    [16466894]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Еще вопросик.
А можно дату форматировать так: 06.08.1987
без функции $translate ?
20 авг 14, 11:28    [16466916]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
Valeriu
Еще вопросик.
А можно дату форматировать так: 06.08.1987
без функции $translate ?

Вот там же в документации пример, с изменением DateSeparator
20 авг 14, 11:32    [16466960]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Спасибо всем, вроде как бы картинка вырисовывается ...
+
YarMonDay(startdate) 
 
; "DD/MM/YEAR"=4,,4 - format delimiter standart
 ; $$SetDCFormat^%NLS("DateSeparator",".") change delimiter
 
startdate=$$horolog(startdate)
 
separator=$$SetDCFormat^%NLS("DateSeparator",".")
 
days,len,months,start,today,years 
 
start=$ZDate(startdate,4,,4) 
 
today=$ZDate($h,4) 
 
!,"Startdate is "_start_", today is "_today_";" 
 
years=$p(today,".",3)-$p(start,".",3) 
 
months=$p(today,".",2)-$p(start,".",2) 
 
days=$p(today,".",1)-$p(start,".",1) 
 
len="31 28 31 30 31 30 31 31 30 31 30 31" 
 
d:$p(today,".",2)=2 
 . 
thisyear 
 
thisyear=$p(today,".",3) 
 . 
s:'(thisyear#4) $p(len,".",2)=29 
 . 
s:'(thisyear#100) $p(len,".",2)=28 
 . 
s:'(thisyear#400) $p(len,".",2)=29 
 . 

 s
:days<0 days=$p(len,".",2)+days,months=months-1 
 
s:months<0 months=12+months,years=years-1 
 
!,"delta is "_days_" days, "_months_" months and "_years_" years.",! 
 
q
 
;  
horolog(data)
 
day=$p(data,".",1)
 
year=$p(data,".",3)
 
year=year<100*1900+year
 
mon=$p(data,".",2)-1
 
j=1841:1:year-1 day=day+365+'(j#4)-'(j#100)+'(j#400)
 
j=31,28,31,30,31,30,31,31,30,31,30 q:'mon  mon=mon-1,day=day+j
 
s:$p(data,".",2)>2 horolog=day+'(year#4)-'(year#100)+'(year#400) 
 
horolog
 

DayMon()
 
date=$zd($h,3)
 
year=$p(date,"-"),month=$p(date,"-",2)+1
 
s:month=13 month=1,year=year+1
 
lastDay=$p($zd($zdh(year_"-"_month_"-01",3)-1,3),"-",3)
 
lastDay
20 авг 14, 12:17    [16467383]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13243
Valeriu
 len="31 28 31 30 31 30 31 31 30 31 30 31"

Почему идея с отниманием дня от первого дня следующего месяца непонравилась?
По-мне так подход явно лучше...
20 авг 14, 13:39    [16468033]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
krvsa,
А я это использую, последняя функция - DayMon()
К стати, не исправил ошибочку в коде
 len="31.28.31.30.31.30.31.31.30.31.30.31"
20 авг 14, 14:48    [16468579]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Еще, там используется функция $zdh, которая в GT.M нету.
Придется переделать как то.
20 авг 14, 14:54    [16468620]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
MaWr
Member

Откуда:
Сообщений: 133
Valeriu
Еще, там используется функция $zdh, которая в GT.M нету.
Придется переделать как то.

В GT.M есть утилита для этого.
21 авг 14, 09:13    [16471854]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13243
MaWr
В GT.M есть утилита для этого.

Вот аналогичная фигня была и в МСМ от Майкронетикс...
21 авг 14, 15:48    [16474976]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
MaWr,
Я знаю, но, хотелось соблюдать "стандарт".
Код без изменений - что там в GT.M ,что здесь в Cache' !
У меня все приложения используют один протокол
и не хотелось менять абсолютно ничего.
21 авг 14, 19:31    [16476285]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Високосный
Guest
Valeriu
 len="31 28 31 30 31 30 31 31 30 31 30 31"

29.02.2016
7 сен 14, 15:56    [16546083]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Високосный,

+ Окончательно с исправлениями:
Days(startdate,finisdate,years,months,days) 
 
; "DD/MM/YEAR"=4,,4 - format delimiter standart
 ; $$SetDCFormat^%NLS("DateSeparator",".") change delimiter
 
startdate=$$horcache(startdate)
 
finisdate=$$horcache(finisdate)
 
SetDCFormat^%NLS("DateSeparator",".")
 
(days,len,months,start,today,years)=""
 
start=$ZDate(startdate,4,,4)
 
today=$ZDate(finisdate,4,,4)
 
luna=+$p(today,".",2) ; zile in luna
 
years=$p(today,".",3)-$p(start,".",3) 
 
months=$p(today,".",2)-$p(start,".",2) 
 
days=$p(today,".",1)-$p(start,".",1) 
 
len="31.28.31.30.31.30.31.31.30.31.30.31" 
 
d:+$p(today,".",2)=2 
 . 
thisyear 
 
thisyear=$p(today,".",3) 
 . 
s:'(thisyear#4) $p(len,".",2)=29 
 . 
s:'(thisyear#100) $p(len,".",2)=28 
 . 
s:'(thisyear#400) $p(len,".",2)=29
 . 

 s
:days<0 days=$p(len,".",luna)+days,months=months-1
 
s:months<0 months=12+months,years=years-1 
 
q
  
;
YarMonDay(startdate,finisdate,years,months,days) 
 
; "DD/MM/YEAR"=4,,4 - format delimiter standart
 ; $$SetDCFormat^%NLS("DateSeparator",".") change delimiter
 
startdate=$$horcache(startdate)
 
finisdate=$$horcache(finisdate)
 
SetDCFormat^%NLS("DateSeparator",".")
 
(days,len,months,start,today,years)=""
 
start=$ZDate(startdate,4,,4)
 
today=$ZDate(finisdate,4,,4)
 
luna=+$p(today,".",2) ; zile in luna
 
years=$p(today,".",3)-$p(start,".",3) 
 
months=$p(today,".",2)-$p(start,".",2) 
 
days=$p(today,".",1)-$p(start,".",1) 
 
len="31.28.31.30.31.30.31.31.30.31.30.31" 
 
d:+$p(today,".",2)=2 
 . 
thisyear 
 
thisyear=$p(today,".",3) 
 . 
s:'(thisyear#4) $p(len,".",2)=29 
 . 
s:'(thisyear#100) $p(len,".",2)=28 
 . 
s:'(thisyear#400) $p(len,".",2)=29
 . 

 s
:days<0 days=$p(len,".",luna)+days,months=months-1
 
s:months<0 months=12+months,years=years-1 
 
q
 
;
MontDays(date)
 
month=+$p(date,".",2)
 
len="31.28.31.30.31.30.31.31.30.31.30.31"
 
montdays=$p(len,".",month)
 
d:+$p(date,".",2)=2 
 . 
thisyear
 
thisyear=$p(date,".",3)  
 . 
s:'(thisyear#4) $p(len,".",2)=29 
 . 
s:'(thisyear#100) $p(len,".",2)=28 
 . 
s:'(thisyear#400) $p(len,".",2)=29
 . 
montdays=$p(len,".",2) 
 
montdays
 

horcache(date)
 
hor=""
 
separator=$$SetDCFormat^%NLS("DateSeparator",".")
 
hor=$ZDATEH(date,4,,4)
 
hor
 
;
horuser(date)
 
day=$p(date,".",1)
 
year=$p(date,".",3)
 
year=year<100*1900+year
 
mon=$p(date,".",2)-1
 
j=1841:1:year-1 day=day+365+'(j#4)-'(j#100)+'(j#400)
 
j=31,28,31,30,31,30,31,31,30,31,30 q:'mon  mon=mon-1,day=day+j
 
s:$p(date,".",2)>2 hor=day+'(year#4)-'(year#100)+'(year#400) 
 
hor
 
;
horgtm(date)
 
;n cc,dat,dd,mm,yy,dh,zd
 
(cc,dat,dd,mm,yy,dh,zd)=""
 
mm=+date,dd=$p(date,".",1),yy=$p(date,".",3),dat=""
 
mm<1 ""
 
mm>13 ""
 
dd<1 ""
 
dd>$s(+mm'=2:$e(303232332323,mm)+28,yy#4:28,yy#100:29,yy#400:28,1:29) ""
 
dat=yy-1841,mm=mm-1,cc=1
 
dat<0 dd=dd-1,cc=-1
 
dat=dat\4*1461+(dat#4-$s(dat'<0:0,1:4)*365)+(mm*30)+$e(10112234455,mm)+dd-(yy-1800\100-(yy-1600\400))
 
yy#4,mm>1 dat=dat-cc
 
yy#100=0,mm<2,yy#400 dat=dat+cc
 
dat
 
;
8 сен 14, 17:24    [16551092]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
Еще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS.
8 сен 14, 17:28    [16551112]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
Valeriu
Еще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS.
Здесь нет и скорее всего не будет подсветки для COS.
8 сен 14, 17:29    [16551119]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2078
DAiMor,
Я так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ?
8 сен 14, 17:31    [16551131]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
Valeriu
DAiMor,
Я так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ?
это servit так делает, у него есть раскраска для кода, но он сейчас в отпуске.
8 сен 14, 18:20    [16551393]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
eduard93
Member

Откуда:
Сообщений: 170
Valeriu,

Можно использовать подсветку синтаксиса из гитхаба intersystems-ru. https://github.com/intersystems-ru/cache-objectscript-syntax-colorer
8 сен 14, 19:04    [16551635]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление разницы между датами  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3119
Блог
Valeriu
Еще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS.
16204606
Valeriu
Я так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ?
14068076
23 сен 14, 18:04    [16612003]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить