powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вычисление разницы между датами
23 сообщений из 48, страница 2 из 2
Вычисление разницы между датами
    #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
23 сообщений из 48, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вычисление разницы между датами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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