/
lib_date.4gl
121 lines (84 loc) · 2.23 KB
/
lib_date.4gl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
IMPORT util
FUNCTION days_in_month(m SMALLINT,y SMALLINT) RETURNS SMALLINT
CASE m
WHEN 2
IF util.Date.isLeapyear(y) THEN
RETURN 29
ELSE
RETURN 28
END IF
WHEN 4 RETURN 30
WHEN 6 RETURN 30
WHEN 9 RETURN 30
WHEN 11 RETURN 30
OTHERWISE
RETURN 31
END CASE
END FUNCTION
FUNCTION days_in_year(y SMALLINT) RETURNS SMALLINT
RETURN IIF(util.Date.isLeapyear(y),366,365)
END FUNCTION
FUNCTION first_of_month(m SMALLINT,y SMALLINT) RETURNS DATE
RETURN MDY(m,1,y)
END FUNCTION
FUNCTION last_of_month(m SMALLINT,y SMALLINT) RETURNS DATE
RETURN MDY(m,days_in_month(m,y),y)
END FUNCTION
FUNCTION add_months(d DATE,m SMALLINT) RETURNS DATE
LET d= (d + m UNITS MONTH)
RETURN d
END FUNCTION
FUNCTION add_years(d DATE,y SMALLINT) RETURNS DATE
LET d= (d + y UNITS YEAR)
RETURN d
END FUNCTION
FUNCTION dddd(l_day SMALLINT) RETURNS STRING
CASE
WHEN l_day < 0
RETURN ""
WHEN l_day > 6
RETURN ""
OTHERWISE
RETURN LSTR(SFMT("lib_date.day.%1", l_day USING "&"))
END CASE
END FUNCTION
FUNCTION dd(l_day SMALLINT) RETURNS STRING
CASE
WHEN l_day < 0
RETURN ""
WHEN l_day > 6
RETURN ""
OTHERWISE
RETURN LSTR(SFMT("lib_date.day2.%1", l_day USING "&"))
END CASE
END FUNCTION
FUNCTION ddd(l_day SMALLINT) RETURNS STRING
CASE
WHEN l_day < 0
RETURN ""
WHEN l_day > 6
RETURN ""
OTHERWISE
RETURN LSTR(SFMT("lib_date.day3.%1", l_day USING "&"))
END CASE
END FUNCTION
FUNCTION mmmm(l_month SMALLINT) RETURNS STRING
CASE
WHEN l_month < 1
RETURN ""
WHEN l_month > 12
RETURN ""
OTHERWISE
RETURN LSTR(SFMT("lib_date.month.%1", l_month USING "<<"))
END CASE
END FUNCTION
FUNCTION mmm(l_month SMALLINT) RETURNS STRING
CASE
WHEN l_month < 1
RETURN ""
WHEN l_month > 12
RETURN ""
OTHERWISE
RETURN LSTR(SFMT("lib_date.month3.%1", l_month USING "<<"))
END CASE
END FUNCTION