]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/date.js
new transit list interface and some date munging. Need persist for transit list
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / date.js
1 dump('entering util/date.js\n');
2
3 if (typeof util == 'undefined') var util = {};
4 util.date = {};
5
6 util.date.EXPORT_OK     = [ 
7         'check', 'timer_init', 'timer_elapsed', 'db_date2Date', 'formatted_date', 'interval_to_seconds'
8 ];
9 util.date.EXPORT_TAGS   = { ':all' : util.date.EXPORT_OK };
10
11 util.date.check = function(format,date) {
12         if (format != 'YYYY-MM-DD') { throw('I only understand YYYY-MM-DD.  Fix me if you want.'); }
13         if (date.length != format.length) { return false; }
14         if ((date.substr(4,1) != '-') || (date.substr(7,1) != '-')) { return false; }
15         var yyyy = date.substr(0,4); var mm = date.substr(5,2); var dd = date.substr(8,2);
16         var d = new Date( yyyy, mm - 1, dd );
17         if (d.toString() == 'Invalid Date') { return false; }
18         if (d.getMonth() != mm -1) { return false; }
19         if (d.getFullYear() != yyyy) { return false; }
20         if (dd.substr(0,1)=='0') { dd = dd.substr(1,1); }
21         if (d.getDate() != dd) { return false; }
22         return true;
23 }
24
25 util.date.check_past = function(format,date) {
26         if (format != 'YYYY-MM-DD') { throw('I only understand YYYY-MM-DD.  Fix me if you want.'); }
27         var yyyy = date.substr(0,4); var mm = date.substr(5,2); var dd = date.substr(8,2);
28         var test_date = new Date( yyyy, mm - 1, dd );
29         date = util.date.formatted_date(new Date(),'%F');
30         yyyy = date.substr(0,4); mm = date.substr(5,2); dd = date.substr(8,2);
31         var today = new Date( yyyy, mm - 1, dd );
32         return test_date < today;
33 }
34
35 util.date.timer_init = function (id) {
36         if (typeof util.date.timer_init.prototype.timer == 'undefined') {
37                 util.date.timer_init.prototype.timer = {};
38         }
39         util.date.timer_init.prototype.timer[id] = (new Date).getTime();
40 }
41
42 util.date.timer_elapsed = function (id) {
43         if (! util.date.timer_init.prototype.timer[id]) { util.date.timer_init(id); }
44         var ms = (new Date).getTime() - util.date.timer_init.prototype.timer[id];
45         return( ms + 'ms (' + ms/1000 + 's)' );
46 }
47
48 util.date.db_date2Date = function (date) {
49         var y  = date.substr(0,4);
50         var mo = date.substr(5,2);
51         var d  = date.substr(8,2);
52         var h  = date.substr(11,2);
53         var mi = date.substr(14,2);
54         var s  = date.substr(17,2);
55         return new Date(y,mo-1,d,h,mi,s);
56 }
57
58 util.date.formatted_date = function (orig_date,format) {
59
60         var _date = orig_date;
61
62         try { 
63
64         // pass in a Date object or epoch seconds or a postgres style date string (2005-07-19 10:38:25.211964-04)
65         if (typeof(_date) == 'string') {
66                 if (_date.match(/:/) || _date.match(/-/)) {
67                         _date = util.date.db_date2Date(_date);
68                 } else {
69                         _date = new Date( Number( _date + '000' ) );
70                 }
71         } else if (typeof(_date) == 'number') {
72                 _date = new Date( _date * 1000 );
73         } 
74         
75         if (_date == null) {
76                 return '';
77         }
78
79         var mm = _date.getMonth() + 1; mm = mm.toString(); if (mm.length == 1) mm = '0' +mm;
80         var dd = _date.getDate().toString(); if (dd.length == 1) dd = '0' +dd;
81         var yyyy = _date.getFullYear().toString();
82         var yy = yyyy.substr(2);
83         var H = _date.getHours(); H = H.toString(); if (H.length == 1) H = '0' + H;
84         var I = _date.getHours(); if (I > 12) I -= 12; I = I.toString();
85         var M = _date.getMinutes(); M = M.toString(); if (M.length == 1) M = '0' + M;
86         var sec = _date.getSeconds(); sec = sec.toString(); if (sec.length == 1) sec = '0' + sec;
87
88         var s = format;
89         if (s == '') { s = '%F %H:%M'; }
90         if (typeof _date.iso8601Format != 'function') {
91                 
92                 var js = JSAN._loadJSFromUrl( urls.isodate_lib );
93                 try { eval( js ); } catch(E) { alert('Problem loading ISO8601 date extension:' + E); }
94
95         }
96         if (typeof _date.iso8601Format == 'function') {
97                 s = s.replace( /%\{iso8601\}/g, _date.iso8601Format("YMDHMS") );
98         }
99         s = s.replace( /%m/g, mm );
100         s = s.replace( /%d/g, dd );
101         s = s.replace( /%Y/g, yyyy );
102         s = s.replace( /%D/g, mm + '/' + dd + '/' + yy );
103         s = s.replace( /%F/g, yyyy + '-' + mm + '-' + dd );
104         s = s.replace( /%H/g, H );
105         s = s.replace( /%I/g, I );
106         s = s.replace( /%M/g, M );
107         s = s.replace( /%s/g, sec );
108         return s;
109
110         } catch(E) {
111                 alert('Error in util.date.formatted_date:\ntypeof orig_date = ' + typeof orig_date + ' orig_date = ' + orig_date + '\ntypeof _date = ' + typeof _date + ' _date = ' + _date + '\nformat = ' + format + '\n' + E);
112         }
113 }
114
115 util.date.interval_to_seconds = function ( $interval ) {
116
117         $interval = $interval.replace( /and/, ',' );
118         $interval = $interval.replace( /,/, ' ' );
119
120         var $amount = 0;
121         var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);  
122         for (var i in results) {
123                 var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
124                 if (result[2] == 's') $amount += result[1] ;
125                 if (result[2] == 'm') $amount += 60 * result[1] ;
126                 if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
127                 if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
128                 if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
129                 if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
130                 if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
131         }
132         return $amount;
133 }
134
135 /* 
136         Lifted from /opac/common/js/util.js
137
138         builds a JS date object with the given info.  The given data
139         has to be valid (e.g. months == 30 is not valid).  Returns NULL on 
140         invalid date 
141         Months are 1-12 (unlike the JS date object)
142 */
143
144 util.date.buildDate = function ( year, month, day, hours, minutes, seconds ) {
145
146         if(!year) year = 0;
147         if(!month) month = 1;
148         if(!day) day = 1;
149         if(!hours) hours = 0;
150         if(!minutes) minutes = 0;
151         if(!seconds) seconds = 0;
152
153         var d = new Date(year, month - 1, day, hours, minutes, seconds);
154         //alert('util.date.buildDate\nyear='+year+' month='+month+' day='+day+' hours='+hours+' minutes='+minutes+' seconds='+seconds+'\nd = ' + d);
155         
156         if( 
157                 (d.getYear() + 1900) == year &&
158                 d.getMonth()    == (month - 1) &&
159                 d.getDate()             == new Number(day) &&
160                 d.getHours()    == new Number(hours) &&
161                 d.getMinutes() == new Number(minutes) &&
162                 d.getSeconds() == new Number(seconds) ) {
163                 return d;
164         }
165
166         return null;
167 }
168
169
170 dump('exiting util/date.js\n');