]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/date.js
LP#1084758 store staff client tpac (etc) zoom pref
[working/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', 'check_past', '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);
28     var mm = date.substr(5,2);
29     var dd = date.substr(8,2);
30     var test_date = new Date( yyyy, mm - 1, dd );
31
32     /* Ensure our date is valid */
33     if (isNaN(test_date.getTime())) {
34         throw('The date "' + date + '" is not valid.');
35     }
36
37     date = util.date.formatted_date(new Date(),'%F');
38     yyyy = date.substr(0,4); mm = date.substr(5,2); dd = date.substr(8,2);
39     var today = new Date( yyyy, mm - 1, dd );
40     return test_date < today;
41 }
42
43 util.date.timer_init = function (id) {
44     if (typeof util.date.timer_init.prototype.timer == 'undefined') {
45         util.date.timer_init.prototype.timer = {};
46     }
47     util.date.timer_init.prototype.timer[id] = (new Date).getTime();
48 }
49
50 util.date.timer_elapsed = function (id) {
51     if (! util.date.timer_init.prototype.timer[id]) { util.date.timer_init(id); }
52     var ms = (new Date).getTime() - util.date.timer_init.prototype.timer[id];
53     return( ms + 'ms (' + ms/1000 + 's)' );
54 }
55
56 util.date.db_date2Date = function (db_date) {
57     if (!db_date) {  /* we get stringified null at times */
58         return new Date(-8640000000000000); /* minimum possible date.
59                                            max is this * -1. */
60     } else if (typeof window.dojo != 'undefined') {
61         dojo.require('dojo.date.stamp');
62         return dojo.date.stamp.fromISOString( db_date.replace( /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[\+-]\d{2})(\d{2})$/, '$1:$2') );
63     } else {
64         var y  = db_date.substr(0,4); 
65         var mo = db_date.substr(5,2); 
66         var d  = db_date.substr(8,2); 
67         var h  = db_date.substr(11,2); 
68         var mi = db_date.substr(14,2); 
69         var s  = db_date.substr(17,2); 
70         return new Date(y,mo-1,d,h,mi,s); 
71     }
72 }
73
74 util.date.formatted_date = function (orig_date,format) {
75
76     var _date = orig_date;
77
78     try { 
79
80     // pass in a Date object or epoch seconds or a postgres style date string (2005-07-19 10:38:25.211964-04)
81     if (typeof(_date) == 'string') {
82         if (_date.match(/:/) || _date.match(/-/)) {
83             _date = util.date.db_date2Date(_date);
84         } else {
85             _date = new Date( Number( _date + '000' ) );
86         }
87     } else if (typeof(_date) == 'number') {
88         _date = new Date( _date * 1000 );
89     } 
90     
91     if (_date == null) {
92         return '';
93     }
94
95     var mm = _date.getMonth() + 1; mm = mm.toString(); if (mm.length == 1) mm = '0' +mm;
96     var dd = _date.getDate().toString(); if (dd.length == 1) dd = '0' +dd;
97     var yyyy = _date.getFullYear().toString();
98     var yy = yyyy.substr(2);
99     var H = _date.getHours(); H = H.toString(); if (H.length == 1) H = '0' + H;
100     var I = _date.getHours(); if (I > 12) I -= 12; I = I.toString();
101     var M = _date.getMinutes(); M = M.toString(); if (M.length == 1) M = '0' + M;
102     var sec = _date.getSeconds(); sec = sec.toString(); if (sec.length == 1) sec = '0' + sec;
103
104     var s = format;
105     if (s == '') { s = '%F %H:%M'; }
106     if (typeof window.dojo != 'undefined') {
107         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
108         dojo.require('dojo.date.locale');
109         dojo.require('dojo.date.stamp');
110         var dojo_format = {};
111         var dojo_format2 = { 'selector' : 'date' };
112         if (data.hash.aous['format.date']) {
113             dojo_format['datePattern'] = data.hash.aous['format.date'];
114             dojo_format2['datePattern'] = data.hash.aous['format.date'];
115         }
116         if (data.hash.aous['format.time']) {
117             dojo_format['timePattern'] = data.hash.aous['format.time'];
118             dojo_format2['timePattern'] = data.hash.aous['format.time'];
119         }
120         s = s.replace( /%\{localized\}/g, dojo.date.locale.format( _date, dojo_format ) );
121         s = s.replace( /%\{localized_date\}/g, dojo.date.locale.format( _date, dojo_format2 ) );
122         s = s.replace( /%\{iso8601\}/g, dojo.date.stamp.toISOString( _date ) );
123     }
124     s = s.replace( /%m/g, mm );
125     s = s.replace( /%d/g, dd );
126     s = s.replace( /%Y/g, yyyy );
127     s = s.replace( /%D/g, mm + '/' + dd + '/' + yy );
128     s = s.replace( /%F/g, yyyy + '-' + mm + '-' + dd );
129     s = s.replace( /%H/g, H );
130     s = s.replace( /%I/g, I );
131     s = s.replace( /%M/g, M );
132     s = s.replace( /%s/g, sec );
133     return s;
134
135     } catch(E) {
136         alert('Error in util.date.formatted_date:\nlocation.href = ' + location.href + '\ntypeof orig_date = ' + typeof orig_date + ' orig_date = ' + orig_date + '\ntypeof _date = ' + typeof _date + ' _date = ' + _date + '\nformat = ' + format + '\n' + E);
137     }
138 }
139
140 util.date.interval_to_seconds = function ( $interval ) {
141
142         $interval = $interval.replace( /and/, ',' );
143         $interval = $interval.replace( /,/, ' ' );
144
145         var $amount = 0;
146     var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);  
147     for (var i in results) {
148         var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
149         if (result[2] == 's') $amount += result[1] ;
150         if (result[2] == 'm') $amount += 60 * result[1] ;
151         if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
152         if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
153         if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
154         if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
155         if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
156         }
157         return $amount;
158 }
159
160 /* 
161     Lifted from /opac/common/js/util.js
162
163     builds a JS date object with the given info.  The given data
164     has to be valid (e.g. months == 30 is not valid).  Returns NULL on 
165     invalid date 
166     Months are 1-12 (unlike the JS date object)
167 */
168
169 util.date.buildDate = function ( year, month, day, hours, minutes, seconds ) {
170
171     if(!year) year = 0;
172     if(!month) month = 1;
173     if(!day) day = 1;
174     if(!hours) hours = 0;
175     if(!minutes) minutes = 0;
176     if(!seconds) seconds = 0;
177
178     var d = new Date(year, month - 1, day, hours, minutes, seconds);
179     //alert('util.date.buildDate\nyear='+year+' month='+month+' day='+day+' hours='+hours+' minutes='+minutes+' seconds='+seconds+'\nd = ' + d);
180     
181     if( 
182         (d.getYear() + 1900) == year &&
183         d.getMonth()    == (month - 1) &&
184         d.getDate()        == new Number(day) &&
185         d.getHours()    == new Number(hours) &&
186         d.getMinutes() == new Number(minutes) &&
187         d.getSeconds() == new Number(seconds) ) {
188         return d;
189     }
190
191     return null;
192 }
193
194
195 dump('exiting util/date.js\n');