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
|
<?LassoScript
define_type('time'); //
/*
Custom type that outputs time formatted in the same way that the date type does. Accepts the same time formatting params that date does like for example time -> format('%T').
Parts of code borrowed from date_int.
Sample usage:
time;
time -> format('%H.%M');
time('18:30:00') -> format('%H.%M');
time('18') -> format('%H.%M');
time('18.70:00') -> format('%T');
time('18.30') -> format('%H.%M');
time('18.30') -> type;
*/
local('time',
);
define_tag( 'oncreate',
-opt = 'time', -copy
);
self -> 'time' = (local_defined('time') ? #time | string(date -> format('%T')));
/define_tag;
define_tag( 'onconvert');
return(self -> 'time');
/define_tag;
define_tag('format', -req = 'formatstring', -type = 'string', -copy);
// convert the format string to bytes to get case sensitive comparisons
#formatstring = bytes(#formatstring);
(self -> 'time' -> type == 'date' ?
self -> 'time' = string(self -> 'time' -> format('%T')));
self -> 'time' -> replace('.', ':');
local('time' = self -> 'time' -> split(':'));
local('size' = #time -> size);
select(true);
case(#size > 2);
return(date(-year = 2008, -month = 1, -day = 1, -hour = integer(#time -> first), -minute = integer(#time -> second), -second = integer(#time -> get(3))) -> format(#formatstring));
case(#size == 2);
return(date(-year = 2008, -month = 1, -day = 1, -hour = integer(#time -> first), -minute = integer(#time -> last), -second = 0) -> format(#formatstring));
case(#size == 1);
return(date(-year = 2008, -month = 1, -day = 1, -hour = integer(#time -> first), -minute = 0, -second = 0) -> format(#formatstring));
/select;
/define_tag;
/define_type;
?>
|