Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDECDATE

SDECDATE.m

Go to the documentation of this file.
  1. SDECDATE ; ALB/WTC,TAW,LAB - VISTA SCHEDULING - Date Utilities ;APR 07,2022
  1. ;;5.3;Scheduling;**694,805,814**;;Build 11
  1. ;;Per VHA Directive 2004-038, this routine should not be modified
  1. ;
  1. Q ;
  1. ;
  1. FMTONET(IN,SPACE) ;
  1. ;
  1. ; Convert FileMan format date/time to .NET compatible date
  1. ;
  1. ; IN = FileMan format date
  1. ; SPACE = Y if @ should be converted to a space
  1. ;
  1. N OUT,X,Y,X1 ;
  1. ;
  1. ; If time is midnight, increment date by one and change time to "0000"
  1. ;
  1. I $P(IN,".",2)="24" D G RETURN ;
  1. . S X=$P(IN,".",1),X1=$$FMADD^DILIBF(X,1,0,0,1),X1=$P(X1,".",1) ;
  1. . S OUT=$$FMTE^DILIBF(X1)_"@00:00" ;
  1. ;
  1. ; Other than midnight.
  1. ;
  1. S OUT=$$FMTE^DILIBF(IN) ;
  1. ;
  1. I $G(SPACE)="Y" S OUT=$TR(OUT,"@"," ") ;
  1. ;
  1. RETURN ;
  1. Q OUT ;
  1. ;
  1. NETTOFM(IN,TIME,SECONDS) ;
  1. ;
  1. ; Convert .NET date/time to FileMan format.
  1. ;
  1. ; IN = date/time in external format
  1. ; TIME = time required (Y/N default=Y)
  1. ; SECONDS = seconds permitted (Y/N default=Y)
  1. ;
  1. N OUT,X,Y,X1,TM ;
  1. ;
  1. ; If time is midnight, decrement date by one and change time to 24.
  1. ;
  1. S TM=$P(IN,"@",2) ; May need to add additional checks for correct time depending on how .NET returns date/time.
  1. ;
  1. S %DT="" ;
  1. I $G(TIME)'="N" S %DT=%DT_"R" ;
  1. I $G(TIME)'="N",$G(SECONDS)'="N" S %DT=%DT_"S" ;
  1. ;
  1. I TM="00:00"!(TM="0000") D G RETURN ;
  1. . S X=$P(IN,"@",1),%DT="" D ^%DT S X=$$FMADD^DILIBF(Y,-1,0,0,1),X1=$P(X,".",1) ;
  1. . S OUT=X1_".24" ;
  1. ;
  1. ; Other than midnight
  1. ;
  1. S X=IN D ^%DT S OUT=Y G RETURN
  1. ;
  1. VALIDFMFORMAT(DATE) ;Is DATE a valind FileMan format
  1. ;Return 1=Yes
  1. ; 0=No
  1. N X,Y,%DT
  1. S %DT="T"
  1. I $G(DATE)="" Q 0
  1. I $$FR^XLFDT(DATE) Q 0
  1. S X=DATE D ^%DT
  1. I Y=-1 Q 0
  1. Q 1
  1. ;
  1. VALIDISO(DATE) ;Is DATE a valid ISO8601 format (e.g., 2022-01-12T13:21)
  1. ; Return
  1. ; 0 = not ISO8601 format
  1. ; 1 = ISO8601 format
  1. N RESULT,SDDATE,SDTIME,SDOFFSET,KEEPSDTIME
  1. S (RESULT)=0
  1. I $G(DATE)="" Q 0
  1. S SDDATE=$P(DATE,"T")
  1. I SDDATE D
  1. .;Validate date
  1. .; YYYYMMDD, YYYY-MM-DD or YYYY-MM
  1. .I SDDATE?6N Q ;YYYY-MM is not allowed
  1. .S SDDATE=$TR(SDDATE,"-")
  1. .I SDDATE?8N!(SDDATE?6N) S RESULT=1
  1. ;
  1. S (SDTIME,KEEPSDTIME)=$P(DATE,"T",2)
  1. I RESULT,SDTIME'="" D
  1. .;Validate time (ignore seconds)
  1. .; THH
  1. .; THHMM or THH:MM
  1. .; THHMMSS or THH:MM:SS
  1. .S SDTIME=$$REMOVEOFFSET^SDAMUTDT(SDTIME)
  1. .S SDTIME=$P(SDTIME,".") ;Ignore seconds
  1. .S SDTIME=$TR(SDTIME,":")
  1. .I SDTIME'?6N,SDTIME'?4N,SDTIME'?2N S RESULT=0 Q
  1. .;Validate offset
  1. .; Z
  1. .; + or - followed by HH
  1. .; + or - followed by HHMM or HH:MM
  1. .I $E(DATE,$L(DATE))="Z" S RESULT=1 Q
  1. .S SDTIME=$TR(KEEPSDTIME,":")
  1. .S SDOFFSET=$P(SDTIME,"+",2)
  1. .I SDOFFSET'="" D Q
  1. ..I SDOFFSET'?2N,SDOFFSET'?4N S RESULT=0
  1. .S SDOFFSET=$P(SDTIME,"-",2)
  1. .I SDOFFSET'="" D Q
  1. ..I SDOFFSET'?2N,SDOFFSET'?4N S RESULT=0
  1. Q RESULT