1 | XBDIFF ; IHS/ADC/GTH - RETURN DIFFERENCE BETWEEN TWO DATE/TIMES ; [ 02/07/97 3:02 PM ]
|
---|
2 | ;;4.0;XB;;Jul 20, 2009;Build 2
|
---|
3 | ;
|
---|
4 | ; Passed two date/times this routine returns the difference
|
---|
5 | ; in days, hours, minutes, seconds separated by colons ":".
|
---|
6 | ;
|
---|
7 | ; The date/times must be passed in the variables X and X1.
|
---|
8 | ; The result will be returned in X. X1 will be killed.
|
---|
9 | ;
|
---|
10 | ; If either X or X1 are invalid X will be returned as -1 and
|
---|
11 | ; X1 will be killed.
|
---|
12 | ;
|
---|
13 | ; The date/times may be passed in $HOROLOG format or in
|
---|
14 | ; internal FileMan format.
|
---|
15 | ;
|
---|
16 | ; See also, $$FMDIFF^XLFDT, and $$HDIFF^XLFDT.
|
---|
17 | ;
|
---|
18 | START ;
|
---|
19 | NEW A,B,C,D,E,F,G
|
---|
20 | D EDIT
|
---|
21 | Q:X<0
|
---|
22 | S:X>X1 A=X,X=X1,X1=A
|
---|
23 | I X?5N1","5N S A=$P(X,",",1),B=$P(X,",",2) I 1
|
---|
24 | E D H^%DTC S A=%H,B=%T
|
---|
25 | I X1?5N1","5N S C=$P(X1,",",1),D=$P(X1,",",2) I 1
|
---|
26 | E S X=X1 D H^%DTC S C=%H,D=%T
|
---|
27 | S E=C-A S:D<B E=E-1,D=D+86400 S D=D-B,F=D\3600,D=D-(F*3600),G=D\60,D=D-(G*60)
|
---|
28 | S X=E_":"_F_":"_G_":"_D
|
---|
29 | KILL %H,%T,%Y,A,B,C,D,E,F,G,X1
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | EDIT ; EDIT INPUT
|
---|
33 | D EDITX
|
---|
34 | Q:X<0
|
---|
35 | D EDITX1
|
---|
36 | Q:X<0
|
---|
37 | I X?5N1"."5N D Q
|
---|
38 | . I $P(X,".",2)>86399 S X=-1 KILL X1
|
---|
39 | . Q
|
---|
40 | S A=$P(X,".",2)
|
---|
41 | I +$E(A,1,2)<24,+$E(A,3,4)<60,+$E(A,5,6)<60 Q
|
---|
42 | E S X=-1 KILL X1
|
---|
43 | KILL A
|
---|
44 | Q
|
---|
45 | ;
|
---|
46 | EDITX ; EDIT X
|
---|
47 | Q:X?5N1"."5N
|
---|
48 | Q:X?7N
|
---|
49 | Q:X?7N1"."1.6N
|
---|
50 | S X=-1
|
---|
51 | KILL X1
|
---|
52 | Q
|
---|
53 | ;
|
---|
54 | EDITX1 ; EDIT X1
|
---|
55 | Q:X?5N1"."5N
|
---|
56 | Q:X?7N
|
---|
57 | Q:X?7N1"."1.6N
|
---|
58 | S X=-1
|
---|
59 | KILL X1
|
---|
60 | Q
|
---|
61 | ;
|
---|