powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вычисление разницы между датами
48 сообщений из 48, показаны все 2 страниц
Вычисление разницы между датами
    #38720918
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые здравствуйте !

Есть необходимость вычисление разницы между двумя датами.
Например 06.08.1987 и сегодняшней, т.е. 15.08.2014
Как средствами COS вычислить сколько лет, месяцев, дней прошло ?

Спасибо.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720922
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/// Количество месяцев между датами
ClassMethod GetCountOfMonth(date1 As p6.dt.Date = "", date2 As p6.dt.Date = "") As %Integer
{
  if ((date1="") || (date2="")) { quit "" } //#
  set tempDate=date1
  set count=0
  while (tempDate<date2) {
    set tempDate=..GetFirstDayOfNextMonth(tempDate)
    set count=count+1
  }
  quit count
}

/// возвращает дату = первое число того месяца который после месяца в date
ClassMethod GetFirstDayOfNextMonth(date As p6.dt.Date = "") As p6.dt.Date
{
  if (date="") quit ""
  set dateString = $zdate(date,3)
   set $piece(dateString,"-",3)="01"
  set month = $Piece(dateString,"-",2)
   if (+month=12) {
     set year = $Piece(dateString,"-",1)
      set $piece(dateString,"-",2)="01"
      set $piece(dateString,"-",1)=year+1
   }
   else { set $piece(dateString,"-",2)=month+1 }
   quit $zdateh(dateString,3)
}
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720928
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vassil,
Спасибо большое, хотелось это делать не пользуясь классами...
Работаю с использованием прямого доступа, используя классический MUMPS.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720935
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
Думаю по аналогии можно переписать. На классическом MUMPS'е не пишу, поэтому боюсь что-нибудь напутать :)
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720950
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriuиспользуя классический MUMPS.
Мамсее некуда...   n
  s dt1="06.08.1987"
  s dt2="15.08.2014"
  s val=$$MonDay(dt1,dt2)
  w !,val
  q

/// Число месяцев и дней в периоде
MonDay(Ds,Dp) 
  n exit,dt1,dt2,mon,day,i
  s:Ds'["." Ds=$$hd(Ds)
  s:Dp'["." Dp=$$hd(Dp)
  q:Ds[" " ""
  q:Dp[" " ""
  s dt2=$$dh(Dp)
  q:$$dh(Ds)>dt2 ""
  s dt1=Ds
  s mon=0
  s exit=0
  f i=1:1 d NEXTMON q:exit
  s day=dt2-$$dh(dt1)+(mon=0)
  q mon_","_day
NEXTMON ; Следующий месяц
  n val
  s val=$$NewDate(Ds,i,1)
  i $$dh(val)>dt2 s exit=1 q
  s mon=i
  s dt1=val 
  q 

/// Новая дата через Num месяцев
NewDate(Date,Num,Type) 
  ; Date  - дата
  ; Num   - количество месяцев 
  ; Type  - 1 уменьшить на день, если дни совпадают
  ; %korr - был или нет подбор даты
  n tp,ln,ms,newms,newyear,day,dt,hr,dt1,dat
  s Num=$g(Num,1)
  s Type=$g(Type)
  k %korr
  q:'Num Date
  s:Date["," Date=+Date 
  s ln=$l(Date)
  s tp=$s(ln=10:1,ln=8:2,1:3)
  s:tp=3 Date=$$hd(Date)
  s:tp=2 Date=$$hd($$dh(Date))
  i Date[" " zt "EmptyDate"
  s ms=$p(Date,".",2)
  s newms=ms+Num
  s newyear=newms-0.5\12+$p(Date,".",3)
  s:newms<1 newyear=newyear-1
  s newms=$tr($j(newms#12,2)," ",0)
  s newyear=$tr(newyear," ",0)
  s:'newms newms=newms+12
  s day=$p(Date,".")
  s dt="01."_newms_"."_newyear
  s dt=$$dh(dt)+day-1
  d KORRDATE
  s:Type=1&'$d(%korr) dt=$$IncDay(dt,$s(-1*Num<0:-1,1:1)) 
  s dat=$$format(dt,tp)
  q dat
KORRDATE ; Подбор дня
  n hr,i
  q:dt'>0
  s hr=dt
  f i=hr:-1 s dt=$$hd(i) q:$p(dt,".",2)=newms
  s:i'=hr %korr=1
  q

/// Инкремент даты в формате +$H и DD.MM.YYYY
IncDay(Date,Inc) 
  n typ
  s:$g(Date)="" Date=+$H
  i Date[" " zt "EmptyDate"
  s Inc=$g(Inc,1)
  s typ=1
  i Date["." s Date=$$dh(Date),typ=2
  s Date=Date+Inc
  q $s(typ=1:Date,1:$$dh(Date))

/// Форматировать дату
format(Date,Type) 
  q:Type=1 Date
  i Type=2 s $e(Date,7,8)="" q Date
  q $$dh(Date)

/// $h -> Dd.Mm.WwYy 
hd(Hor) 
  q:'$g(Hor) "" 
  q $tr("Dd.Mm.WwYy","WwYy-Mm-Dd",$zd(Hor,3))

/// Dd.Mm.WwYy -> $h 
dh(Date) 
  q:'$g(Date) "" 
  q:Date'["." Date
  s Date=$tr("WwYy-Mm-Dd","Dd.Mm.WwYy",Date)
  q $zdh(Date,3)
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720967
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Спасибо. Кода многовато конечно ...
ОК. Попробуем разобраться.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720973
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuКода многовато конечно ...
У нас дата используется в 3-х вариантах + 1 модификация... Да и сами функции писаны сверх защищенно...

Если убрать защиту... Сократить форматы дат - будет меньше кода.
Но это писалось один раз и черти когда. А потом просто использовалось всеми и проблем небыло.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720976
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuКода многовато конечно ...
На МСМе было еще больше.
Поскольку там небыло функций перевода даты в хоролог и обратно... Все это так же вычислялось самостоятельно...
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720979
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С условием явно перемудрили...
Вот более понятный вариант. s:Type=1&'$d(%korr) dt=$$IncDay(dt,$s(Num<0:1,1:-1)) 
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38720991
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa s:Type=1&'$d(%korr) Не стоит писать так условия с одним & или !, нужно писать с двойным && или ||
когда вы пишите с одним знаком, второе выражение все равно будет вычисляться
а если с двойным, то завершится при первом подходящем варианте
пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	set a=-1 if $increment(a) & $increment(a) {} zwrite a
a=1

	set a=-1 if $increment(a) && $increment(a) {} zwrite a
a=0

	set a=0 if $increment(a) ! $increment(a) {} zwrite a
a=2

	set a=0 if $increment(a) || $increment(a) {} zwrite a
a=1
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721011
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorНе стоит писать так условия с одним & или !, нужно писать с двойным && или ||
Я сделаю плакат с твоими рекомендациями и повешу у входа, дабы все видели.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721023
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по теме, есть уже все готовое для поиска разницы дат, это sql функция DATEDIFF   set date1="06.08.1987"
  set date1=$zdateh($translate(date1,".","/"),4)
  set date2=$piece($horolog,",")
  write !,"years: ",$system.SQL.DATEDIFF("yy",date1,date2)
  write !,"months: ",$system.SQL.DATEDIFF("mm",date1,date2)
  write !,"weeks: ",$system.SQL.DATEDIFF("wk",date1,date2)
  write !,"days: ",$system.SQL.DATEDIFF("dd",date1,date2)
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721033
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorа по теме, есть уже все готовое для поиска разницы дат, это sql функция DATEDIFF   set date1="06.08.1987"
  set date1=$zdateh($translate(date1,".","/"),4)
  set date2=$piece($horolog,",")
  write !,"years: ",$system.SQL.DATEDIFF("yy",date1,date2)
  write !,"months: ",$system.SQL.DATEDIFF("mm",date1,date2)
  write !,"weeks: ",$system.SQL.DATEDIFF("wk",date1,date2)
  write !,"days: ",$system.SQL.DATEDIFF("dd",date1,date2)
Не факт что автору нужно "всего дней" с первой даты по вторую...
А как раз все сложность именно в тех днях, которых не хватает до месяца.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721062
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Да, хотелось более универсально и для других MUMPS систем.
Для GT.M например.

Спасибо.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721063
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaА как раз все сложность именно в тех днях, которых не хватает до месяца.В этом поможет другая SQL функция DATEADD   set date1="06.05.1987"
  set date1=$zdateh($translate(date1,".","/"),4)
  set date2=$piece($horolog,",")
  set dateTemp=date1
  set years=$system.SQL.DATEDIFF("yy",date1,date2)
  set dateTemp=$system.SQL.DATEADD("yy",years,dateTemp)
  
  set months=$system.SQL.DATEDIFF("mm",dateTemp,date2)
  set dateTemp=$system.SQL.DATEADD("mm",months,dateTemp)
  
  set days=$system.SQL.DATEDIFF("dd",dateTemp,date2)
  
  zwrite years,months,days
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721066
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriukrvsa,
Да, хотелось более универсально и для других MUMPS систем.
Для GT.M например.

Спасибо.Вы попросили COS, я и предложил COS, тогда нужно было сразу просить на чистом M
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721085
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
:) Прошу прощения за неточность.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721093
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuДля GT.M например.
Там есть перевод Дд.Мм.ВвГг в хоролог и обратно?
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721134
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Как бы там у них все в $zdate и $zdateform
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38721157
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , просто в МСМе кроме $h ничего с датами и небыло...
Была правда процедурка с проносимыми переменными... Но это вообще фигня.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38722375
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
А системная функция может нам указать сколько дней
имеется в конкретном выбранном месяце ?

Спасибо.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38722404
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,

По-моему это довольно просто рассчитывается/// Проверка является ли год Високосным
ClassMethod isLeapYear(year As %Integer) As %Boolean [ Final ]
{
  Quit:(year#4 '= 0) 0
  Quit:(year#400 = 0) 1
  Quit:(year#100 = 0) 0
  Quit 1
}

/// Получить количество дней в месяце в указанном году
ClassMethod getDaysInMonth(year As %Integer, month As %Integer) As %Integer [ Final ]
{
  Quit +$P("31,28,31,30,31,30,31,31,30,31,30,31",",",month)+$S((month=2)&&..isLeapYear(year):1,1:0)
}
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38722408
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuDAiMor,
А системная функция может нам указать сколько дней
имеется в конкретном выбранном месяце ?

Спасибо.Может вернуть последний день для текущего месяца
так
Код: plaintext
w $zd($SYSTEM.SQL.LASTDAY($h))
либо так
Код: plaintext
w $zd($SYSTEM.SQL.LASTDAY("2014-01-1"))
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38722416
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
У меня версия старая 5.0.
Этого метода нету вроде...
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38722438
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuDAiMor,
У меня версия старая 5.0.
Этого метода нету вроде...Да, похоже, что появилась она только в 2011 версии
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38723083
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeriuDAiMor,
А системная функция может нам указать сколько дней
имеется в конкретном выбранном месяце ?

Спасибо.
Проще всего взять первый день следующего месяца и вычесть 1: s date=$zd($h,3)
 s year=$p(date,"-"),month=$p(date,"-",2)+1
 s:month=13 month=1,year=year+1
 s lastDay=$p($zd($zdh(year_"-"_month_"-01",3)-1,3),"-",3)
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38723743
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWr,
Спасибо.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724195
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять как форматируется дата...

Код: plaintext
1.
CADRE>w $ZDate(53543,4)
06/08/87

Я хочу получить 06/08/1987, т.е. полный год
Что не правильно ?
Спасибо.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724206
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$ZDate 4 параметр yearopt

Код: plaintext
1.
w $ZDate(53543,4,,4)
06/08/1987
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724217
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , как вариант...  w $tr("Dd.Mm.VvYy","VvYy-Mm-Dd",$ZD(53543,3))
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724222
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,krvsa,

Спасибо !
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724225
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопросик.
А можно дату форматировать так: 06.08.1987
без функции $translate ?
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724232
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuЕще вопросик.
А можно дату форматировать так: 06.08.1987
без функции $translate ?
Вот там же в документации пример , с изменением DateSeparator
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724314
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, вроде как бы картинка вырисовывается ...
YarMonDay(startdate) 
 ; "DD/MM/YEAR"=4,,4 - format delimiter standart
 ; $$SetDCFormat^%NLS("DateSeparator",".") change delimiter
 s startdate=$$horolog(startdate)
 s separator=$$SetDCFormat^%NLS("DateSeparator",".")
 n days,len,months,start,today,years 
 s start=$ZDate(startdate,4,,4) 
 s today=$ZDate($h,4) 
 w !,"Startdate is "_start_", today is "_today_";" 
 s years=$p(today,".",3)-$p(start,".",3) 
 s months=$p(today,".",2)-$p(start,".",2) 
 s days=$p(today,".",1)-$p(start,".",1) 
 s len="31 28 31 30 31 30 31 31 30 31 30 31" 
 d:$p(today,".",2)=2 
 . n thisyear 
 . s 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 
 . q 
 s:days<0 days=$p(len,".",2)+days,months=months-1 
 s:months<0 months=12+months,years=years-1 
 w !,"delta is "_days_" days, "_months_" months and "_years_" years.",! 
 q
 ;  
horolog(data)
 s day=$p(data,".",1)
 s year=$p(data,".",3)
 s year=year<100*1900+year
 s mon=$p(data,".",2)-1
 f j=1841:1:year-1 s day=day+365+'(j#4)-'(j#100)+'(j#400)
 f j=31,28,31,30,31,30,31,31,30,31,30 q:'mon  s mon=mon-1,day=day+j
 s:$p(data,".",2)>2 horolog=day+'(year#4)-'(year#100)+'(year#400) 
 q horolog
 ; 
DayMon()
 s date=$zd($h,3)
 s year=$p(date,"-"),month=$p(date,"-",2)+1
 s:month=13 month=1,year=year+1
 s lastDay=$p($zd($zdh(year_"-"_month_"-01",3)-1,3),"-",3)
 q lastDay
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724464
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu s len="31 28 31 30 31 30 31 31 30 31 30 31"
Почему идея с отниманием дня от первого дня следующего месяца непонравилась?
По-мне так подход явно лучше...
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724570
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
А я это использую, последняя функция - DayMon()
К стати, не исправил ошибочку в коде s len="31.28.31.30.31.30.31.31.30.31.30.31"
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38724580
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще, там используется функция $zdh, которая в GT.M нету.
Придется переделать как то.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38725195
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeriuЕще, там используется функция $zdh, которая в GT.M нету.
Придется переделать как то.
В GT.M есть утилита для этого.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38725736
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWrВ GT.M есть утилита для этого.
Вот аналогичная фигня была и в МСМ от Майкронетикс...
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38726025
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWr,
Я знаю, но, хотелось соблюдать "стандарт".
Код без изменений - что там в GT.M ,что здесь в Cache' !
У меня все приложения используют один протокол
и не хотелось менять абсолютно ничего.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38739807
Valeriu s len="31  28  31 30 31 30 31 31 30 31 30 31"
29 .02.2016
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38740876
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Високосный,

Окончательно с исправлениями:Days(startdate,finisdate,years,months,days) 
 ; "DD/MM/YEAR"=4,,4 - format delimiter standart
 ; $$SetDCFormat^%NLS("DateSeparator",".") change delimiter
 s startdate=$$horcache(startdate)
 s finisdate=$$horcache(finisdate)
 d SetDCFormat^%NLS("DateSeparator",".")
 s (days,len,months,start,today,years)=""
 s start=$ZDate(startdate,4,,4)
 s today=$ZDate(finisdate,4,,4)
 s luna=+$p(today,".",2) ; zile in luna
 s years=$p(today,".",3)-$p(start,".",3) 
 s months=$p(today,".",2)-$p(start,".",2) 
 s days=$p(today,".",1)-$p(start,".",1) 
 s len="31.28.31.30.31.30.31.31.30.31.30.31" 
 d:+$p(today,".",2)=2 
 . n thisyear 
 . s 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
 . q 
 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
 s startdate=$$horcache(startdate)
 s finisdate=$$horcache(finisdate)
 d SetDCFormat^%NLS("DateSeparator",".")
 s (days,len,months,start,today,years)=""
 s start=$ZDate(startdate,4,,4)
 s today=$ZDate(finisdate,4,,4)
 s luna=+$p(today,".",2) ; zile in luna
 s years=$p(today,".",3)-$p(start,".",3) 
 s months=$p(today,".",2)-$p(start,".",2) 
 s days=$p(today,".",1)-$p(start,".",1) 
 s len="31.28.31.30.31.30.31.31.30.31.30.31" 
 d:+$p(today,".",2)=2 
 . n thisyear 
 . s 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
 . q 
 s:days<0 days=$p(len,".",luna)+days,months=months-1
 s:months<0 months=12+months,years=years-1 
 q
 ;
MontDays(date)
 s month=+$p(date,".",2)
 s len="31.28.31.30.31.30.31.31.30.31.30.31"
 s montdays=$p(len,".",month)
 d:+$p(date,".",2)=2 
 . n thisyear
 . s 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
 . s montdays=$p(len,".",2) 
 q montdays
 ; 
horcache(date)
 s hor=""
 s separator=$$SetDCFormat^%NLS("DateSeparator",".")
 s hor=$ZDATEH(date,4,,4)
 q hor
 ;
horuser(date)
 s day=$p(date,".",1)
 s year=$p(date,".",3)
 s year=year<100*1900+year
 s mon=$p(date,".",2)-1
 f j=1841:1:year-1 s day=day+365+'(j#4)-'(j#100)+'(j#400)
 f j=31,28,31,30,31,30,31,31,30,31,30 q:'mon  s mon=mon-1,day=day+j
 s:$p(date,".",2)>2 hor=day+'(year#4)-'(year#100)+'(year#400) 
 q hor
 ;
horgtm(date)
 ;n cc,dat,dd,mm,yy,dh,zd
 s (cc,dat,dd,mm,yy,dh,zd)=""
 s mm=+date,dd=$p(date,".",1),yy=$p(date,".",3),dat=""
 i mm<1 q ""
 i mm>13 q ""
 i dd<1 q ""
 i dd>$s(+mm'=2:$e(303232332323,mm)+28,yy#4:28,yy#100:29,yy#400:28,1:29) q ""
 s dat=yy-1841,mm=mm-1,cc=1
 i dat<0 s dd=dd-1,cc=-1
 s 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))
 i yy#4,mm>1 s dat=dat-cc
 i yy#100=0,mm<2,yy#400 s dat=dat+cc
 q dat
 ;
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38740882
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38740885
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuЕще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS.Здесь нет и скорее всего не будет подсветки для COS.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38740888
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Я так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ?
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38740960
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuDAiMor,
Я так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ?это servit так делает, у него есть раскраска для кода, но он сейчас в отпуске.
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38741021
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

Можно использовать подсветку синтаксиса из гитхаба intersystems-ru. https://github.com/intersystems-ru/cache-objectscript-syntax-colorer
...
Рейтинг: 0 / 0
Вычисление разницы между датами
    #38755102
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuЕще.
Как оформлять текст рутины ?
Вроде как бы не нахожу где правильная подсветка синтаксиса для COS. 16204606
ValeriuЯ так и понял... А как вы это делаете ?
Вроде вижу, что исправляете ? 14068076
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вычисление разницы между датами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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