Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.date.common");
13
dojo.provide("dojo.date.common");
12
dojo.date.setDayOfYear = function (dateObject, dayOfYear) {
14
dojo.date.setDayOfYear = function (dateObject, dayOfYear) {
13
	dateObject.setMonth(0);
15
	dateObject.setMonth(0);
14
	dateObject.setDate(dayOfYear);
16
	dateObject.setDate(dayOfYear);
15
	return dateObject;
17
	return dateObject;
16
};
18
};
17
dojo.date.getDayOfYear = function (dateObject) {
19
dojo.date.getDayOfYear = function (dateObject) {
18
	var fullYear = dateObject.getFullYear();
20
	var fullYear = dateObject.getFullYear();
19
	var lastDayOfPrevYear = new Date(fullYear - 1, 11, 31);
21
	var lastDayOfPrevYear = new Date(fullYear - 1, 11, 31);
20
	return Math.floor((dateObject.getTime() - lastDayOfPrevYear.getTime()) / 86400000);
22
	return Math.floor((dateObject.getTime() - lastDayOfPrevYear.getTime()) / 86400000);
21
};
23
};
22
dojo.date.setWeekOfYear = function (dateObject, week, firstDay) {
24
dojo.date.setWeekOfYear = function (dateObject, week, firstDay) {
23
	if (arguments.length == 1) {
25
	if (arguments.length == 1) {
24
		firstDay = 0;
26
		firstDay = 0;
25
	}
27
	}
26
	dojo.unimplemented("dojo.date.setWeekOfYear");
28
	dojo.unimplemented("dojo.date.setWeekOfYear");
27
};
29
};
28
dojo.date.getWeekOfYear = function (dateObject, firstDay) {
30
dojo.date.getWeekOfYear = function (dateObject, firstDay) {
29
	if (arguments.length == 1) {
31
	if (arguments.length == 1) {
30
		firstDay = 0;
32
		firstDay = 0;
31
	}
33
	}
32
	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
34
	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
33
	var day = firstDayOfYear.getDay();
35
	var day = firstDayOfYear.getDay();
34
	firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay - (day > firstDay ? 7 : 0));
36
	firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay - (day > firstDay ? 7 : 0));
35
	return Math.floor((dateObject.getTime() - firstDayOfYear.getTime()) / 604800000);
37
	return Math.floor((dateObject.getTime() - firstDayOfYear.getTime()) / 604800000);
36
};
38
};
37
dojo.date.setIsoWeekOfYear = function (dateObject, week, firstDay) {
39
dojo.date.setIsoWeekOfYear = function (dateObject, week, firstDay) {
38
	if (arguments.length == 1) {
40
	if (arguments.length == 1) {
39
		firstDay = 1;
41
		firstDay = 1;
40
	}
42
	}
41
	dojo.unimplemented("dojo.date.setIsoWeekOfYear");
43
	dojo.unimplemented("dojo.date.setIsoWeekOfYear");
42
};
44
};
43
dojo.date.getIsoWeekOfYear = function (dateObject, firstDay) {
45
dojo.date.getIsoWeekOfYear = function (dateObject, firstDay) {
44
	if (arguments.length == 1) {
46
	if (arguments.length == 1) {
45
		firstDay = 1;
47
		firstDay = 1;
46
	}
48
	}
47
	dojo.unimplemented("dojo.date.getIsoWeekOfYear");
49
	dojo.unimplemented("dojo.date.getIsoWeekOfYear");
48
};
50
};
49
dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST", "CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK", "IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST", "JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT", "LINT"];
51
dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST", "CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK", "IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST", "JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT", "LINT"];
50
dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
52
dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
51
dojo.date.getDaysInMonth = function (dateObject) {
53
dojo.date.getDaysInMonth = function (dateObject) {
52
	var month = dateObject.getMonth();
54
	var month = dateObject.getMonth();
53
	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
55
	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
54
	if (month == 1 && dojo.date.isLeapYear(dateObject)) {
56
	if (month == 1 && dojo.date.isLeapYear(dateObject)) {
55
		return 29;
57
		return 29;
56
	} else {
58
	} else {
57
		return days[month];
59
		return days[month];
58
	}
60
	}
59
};
61
};
60
dojo.date.isLeapYear = function (dateObject) {
62
dojo.date.isLeapYear = function (dateObject) {
61
	var year = dateObject.getFullYear();
63
	var year = dateObject.getFullYear();
62
	return (year % 400 == 0) ? true : (year % 100 == 0) ? false : (year % 4 == 0) ? true : false;
64
	return (year % 400 == 0) ? true : (year % 100 == 0) ? false : (year % 4 == 0) ? true : false;
63
};
65
};
64
dojo.date.getTimezoneName = function (dateObject) {
66
dojo.date.getTimezoneName = function (dateObject) {
65
	var str = dateObject.toString();
67
	var str = dateObject.toString();
66
	var tz = "";
68
	var tz = "";
67
	var match;
69
	var match;
68
	var pos = str.indexOf("(");
70
	var pos = str.indexOf("(");
69
	if (pos > -1) {
71
	if (pos > -1) {
70
		pos++;
72
		pos++;
71
		tz = str.substring(pos, str.indexOf(")"));
73
		tz = str.substring(pos, str.indexOf(")"));
72
	} else {
74
	} else {
73
		var pat = /([A-Z\/]+) \d{4}$/;
75
		var pat = /([A-Z\/]+) \d{4}$/;
74
		if ((match = str.match(pat))) {
76
		if ((match = str.match(pat))) {
75
			tz = match[1];
77
			tz = match[1];
76
		} else {
78
		} else {
77
			str = dateObject.toLocaleString();
79
			str = dateObject.toLocaleString();
78
			pat = / ([A-Z\/]+)$/;
80
			pat = / ([A-Z\/]+)$/;
79
			if ((match = str.match(pat))) {
81
			if ((match = str.match(pat))) {
80
				tz = match[1];
82
				tz = match[1];
81
			}
83
			}
82
		}
84
		}
83
	}
85
	}
84
	return tz == "AM" || tz == "PM" ? "" : tz;
86
	return tz == "AM" || tz == "PM" ? "" : tz;
85
};
87
};
86
dojo.date.getOrdinal = function (dateObject) {
88
dojo.date.getOrdinal = function (dateObject) {
87
	var date = dateObject.getDate();
89
	var date = dateObject.getDate();
88
	if (date % 100 != 11 && date % 10 == 1) {
90
	if (date % 100 != 11 && date % 10 == 1) {
89
		return "st";
91
		return "st";
90
	} else {
92
	} else {
91
		if (date % 100 != 12 && date % 10 == 2) {
93
		if (date % 100 != 12 && date % 10 == 2) {
92
			return "nd";
94
			return "nd";
93
		} else {
95
		} else {
94
			if (date % 100 != 13 && date % 10 == 3) {
96
			if (date % 100 != 13 && date % 10 == 3) {
95
				return "rd";
97
				return "rd";
96
			} else {
98
			} else {
97
				return "th";
99
				return "th";
98
			}
100
			}
99
		}
101
		}
100
	}
102
	}
101
};
103
};
102
dojo.date.compareTypes = {DATE:1, TIME:2};
104
dojo.date.compareTypes = {DATE:1, TIME:2};
103
dojo.date.compare = function (dateA, dateB, options) {
105
dojo.date.compare = function (dateA, dateB, options) {
104
	var dA = dateA;
106
	var dA = dateA;
105
	var dB = dateB || new Date();
107
	var dB = dateB || new Date();
106
	var now = new Date();
108
	var now = new Date();
107
	with (dojo.date.compareTypes) {
109
	with (dojo.date.compareTypes) {
108
		var opt = options || (DATE | TIME);
110
		var opt = options || (DATE | TIME);
109
		var d1 = new Date((opt & DATE) ? dA.getFullYear() : now.getFullYear(), (opt & DATE) ? dA.getMonth() : now.getMonth(), (opt & DATE) ? dA.getDate() : now.getDate(), (opt & TIME) ? dA.getHours() : 0, (opt & TIME) ? dA.getMinutes() : 0, (opt & TIME) ? dA.getSeconds() : 0);
111
		var d1 = new Date((opt & DATE) ? dA.getFullYear() : now.getFullYear(), (opt & DATE) ? dA.getMonth() : now.getMonth(), (opt & DATE) ? dA.getDate() : now.getDate(), (opt & TIME) ? dA.getHours() : 0, (opt & TIME) ? dA.getMinutes() : 0, (opt & TIME) ? dA.getSeconds() : 0);
110
		var d2 = new Date((opt & DATE) ? dB.getFullYear() : now.getFullYear(), (opt & DATE) ? dB.getMonth() : now.getMonth(), (opt & DATE) ? dB.getDate() : now.getDate(), (opt & TIME) ? dB.getHours() : 0, (opt & TIME) ? dB.getMinutes() : 0, (opt & TIME) ? dB.getSeconds() : 0);
112
		var d2 = new Date((opt & DATE) ? dB.getFullYear() : now.getFullYear(), (opt & DATE) ? dB.getMonth() : now.getMonth(), (opt & DATE) ? dB.getDate() : now.getDate(), (opt & TIME) ? dB.getHours() : 0, (opt & TIME) ? dB.getMinutes() : 0, (opt & TIME) ? dB.getSeconds() : 0);
111
	}
113
	}
112
	if (d1.valueOf() > d2.valueOf()) {
114
	if (d1.valueOf() > d2.valueOf()) {
113
		return 1;
115
		return 1;
114
	}
116
	}
115
	if (d1.valueOf() < d2.valueOf()) {
117
	if (d1.valueOf() < d2.valueOf()) {
116
		return -1;
118
		return -1;
117
	}
119
	}
118
	return 0;
120
	return 0;
119
};
121
};
120
dojo.date.dateParts = {YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9};
122
dojo.date.dateParts = {YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9};
121
dojo.date.add = function (dt, interv, incr) {
123
dojo.date.add = function (dt, interv, incr) {
122
	if (typeof dt == "number") {
124
	if (typeof dt == "number") {
123
		dt = new Date(dt);
125
		dt = new Date(dt);
124
	}
126
	}
125
	function fixOvershoot() {
127
	function fixOvershoot() {
126
		if (sum.getDate() < dt.getDate()) {
128
		if (sum.getDate() < dt.getDate()) {
127
			sum.setDate(0);
129
			sum.setDate(0);
128
		}
130
		}
129
	}
131
	}
130
	var sum = new Date(dt);
132
	var sum = new Date(dt);
131
	with (dojo.date.dateParts) {
133
	with (dojo.date.dateParts) {
132
		switch (interv) {
134
		switch (interv) {
133
		  case YEAR:
135
		  case YEAR:
134
			sum.setFullYear(dt.getFullYear() + incr);
136
			sum.setFullYear(dt.getFullYear() + incr);
135
			fixOvershoot();
137
			fixOvershoot();
136
			break;
138
			break;
137
		  case QUARTER:
139
		  case QUARTER:
138
			incr *= 3;
140
			incr *= 3;
139
		  case MONTH:
141
		  case MONTH:
140
			sum.setMonth(dt.getMonth() + incr);
142
			sum.setMonth(dt.getMonth() + incr);
141
			fixOvershoot();
143
			fixOvershoot();
142
			break;
144
			break;
143
		  case WEEK:
145
		  case WEEK:
144
			incr *= 7;
146
			incr *= 7;
145
		  case DAY:
147
		  case DAY:
146
			sum.setDate(dt.getDate() + incr);
148
			sum.setDate(dt.getDate() + incr);
147
			break;
149
			break;
148
		  case WEEKDAY:
150
		  case WEEKDAY:
149
			var dat = dt.getDate();
151
			var dat = dt.getDate();
150
			var weeks = 0;
152
			var weeks = 0;
151
			var days = 0;
153
			var days = 0;
152
			var strt = 0;
154
			var strt = 0;
153
			var trgt = 0;
155
			var trgt = 0;
154
			var adj = 0;
156
			var adj = 0;
155
			var mod = incr % 5;
157
			var mod = incr % 5;
156
			if (mod == 0) {
158
			if (mod == 0) {
157
				days = (incr > 0) ? 5 : -5;
159
				days = (incr > 0) ? 5 : -5;
158
				weeks = (incr > 0) ? ((incr - 5) / 5) : ((incr + 5) / 5);
160
				weeks = (incr > 0) ? ((incr - 5) / 5) : ((incr + 5) / 5);
159
			} else {
161
			} else {
160
				days = mod;
162
				days = mod;
161
				weeks = parseInt(incr / 5);
163
				weeks = parseInt(incr / 5);
162
			}
164
			}
163
			strt = dt.getDay();
165
			strt = dt.getDay();
164
			if (strt == 6 && incr > 0) {
166
			if (strt == 6 && incr > 0) {
165
				adj = 1;
167
				adj = 1;
166
			} else {
168
			} else {
167
				if (strt == 0 && incr < 0) {
169
				if (strt == 0 && incr < 0) {
168
					adj = -1;
170
					adj = -1;
169
				}
171
				}
170
			}
172
			}
171
			trgt = (strt + days);
173
			trgt = (strt + days);
172
			if (trgt == 0 || trgt == 6) {
174
			if (trgt == 0 || trgt == 6) {
173
				adj = (incr > 0) ? 2 : -2;
175
				adj = (incr > 0) ? 2 : -2;
174
			}
176
			}
175
			sum.setDate(dat + (7 * weeks) + days + adj);
177
			sum.setDate(dat + (7 * weeks) + days + adj);
176
			break;
178
			break;
177
		  case HOUR:
179
		  case HOUR:
178
			sum.setHours(sum.getHours() + incr);
180
			sum.setHours(sum.getHours() + incr);
179
			break;
181
			break;
180
		  case MINUTE:
182
		  case MINUTE:
181
			sum.setMinutes(sum.getMinutes() + incr);
183
			sum.setMinutes(sum.getMinutes() + incr);
182
			break;
184
			break;
183
		  case SECOND:
185
		  case SECOND:
184
			sum.setSeconds(sum.getSeconds() + incr);
186
			sum.setSeconds(sum.getSeconds() + incr);
185
			break;
187
			break;
186
		  case MILLISECOND:
188
		  case MILLISECOND:
187
			sum.setMilliseconds(sum.getMilliseconds() + incr);
189
			sum.setMilliseconds(sum.getMilliseconds() + incr);
188
			break;
190
			break;
189
		  default:
191
		  default:
190
			break;
192
			break;
191
		}
193
		}
192
	}
194
	}
193
	return sum;
195
	return sum;
194
};
196
};
195
dojo.date.diff = function (dtA, dtB, interv) {
197
dojo.date.diff = function (dtA, dtB, interv) {
196
	if (typeof dtA == "number") {
198
	if (typeof dtA == "number") {
197
		dtA = new Date(dtA);
199
		dtA = new Date(dtA);
198
	}
200
	}
199
	if (typeof dtB == "number") {
201
	if (typeof dtB == "number") {
200
		dtB = new Date(dtB);
202
		dtB = new Date(dtB);
201
	}
203
	}
202
	var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
204
	var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
203
	var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
205
	var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
204
	var msDiff = dtB.getTime() - dtA.getTime();
206
	var msDiff = dtB.getTime() - dtA.getTime();
205
	var secDiff = msDiff / 1000;
207
	var secDiff = msDiff / 1000;
206
	var minDiff = secDiff / 60;
208
	var minDiff = secDiff / 60;
207
	var houDiff = minDiff / 60;
209
	var houDiff = minDiff / 60;
208
	var dayDiff = houDiff / 24;
210
	var dayDiff = houDiff / 24;
209
	var weeDiff = dayDiff / 7;
211
	var weeDiff = dayDiff / 7;
210
	var delta = 0;
212
	var delta = 0;
211
	with (dojo.date.dateParts) {
213
	with (dojo.date.dateParts) {
212
		switch (interv) {
214
		switch (interv) {
213
		  case YEAR:
215
		  case YEAR:
214
			delta = yeaDiff;
216
			delta = yeaDiff;
215
			break;
217
			break;
216
		  case QUARTER:
218
		  case QUARTER:
217
			var mA = dtA.getMonth();
219
			var mA = dtA.getMonth();
218
			var mB = dtB.getMonth();
220
			var mB = dtB.getMonth();
219
			var qA = Math.floor(mA / 3) + 1;
221
			var qA = Math.floor(mA / 3) + 1;
220
			var qB = Math.floor(mB / 3) + 1;
222
			var qB = Math.floor(mB / 3) + 1;
221
			qB += (yeaDiff * 4);
223
			qB += (yeaDiff * 4);
222
			delta = qB - qA;
224
			delta = qB - qA;
223
			break;
225
			break;
224
		  case MONTH:
226
		  case MONTH:
225
			delta = monDiff;
227
			delta = monDiff;
226
			break;
228
			break;
227
		  case WEEK:
229
		  case WEEK:
228
			delta = parseInt(weeDiff);
230
			delta = parseInt(weeDiff);
229
			break;
231
			break;
230
		  case DAY:
232
		  case DAY:
231
			delta = dayDiff;
233
			delta = dayDiff;
232
			break;
234
			break;
233
		  case WEEKDAY:
235
		  case WEEKDAY:
234
			var days = Math.round(dayDiff);
236
			var days = Math.round(dayDiff);
235
			var weeks = parseInt(days / 7);
237
			var weeks = parseInt(days / 7);
236
			var mod = days % 7;
238
			var mod = days % 7;
237
			if (mod == 0) {
239
			if (mod == 0) {
238
				days = weeks * 5;
240
				days = weeks * 5;
239
			} else {
241
			} else {
240
				var adj = 0;
242
				var adj = 0;
241
				var aDay = dtA.getDay();
243
				var aDay = dtA.getDay();
242
				var bDay = dtB.getDay();
244
				var bDay = dtB.getDay();
243
				weeks = parseInt(days / 7);
245
				weeks = parseInt(days / 7);
244
				mod = days % 7;
246
				mod = days % 7;
245
				var dtMark = new Date(dtA);
247
				var dtMark = new Date(dtA);
246
				dtMark.setDate(dtMark.getDate() + (weeks * 7));
248
				dtMark.setDate(dtMark.getDate() + (weeks * 7));
247
				var dayMark = dtMark.getDay();
249
				var dayMark = dtMark.getDay();
248
				if (dayDiff > 0) {
250
				if (dayDiff > 0) {
249
					switch (true) {
251
					switch (true) {
250
					  case aDay == 6:
252
					  case aDay == 6:
251
						adj = -1;
253
						adj = -1;
252
						break;
254
						break;
253
					  case aDay == 0:
255
					  case aDay == 0:
254
						adj = 0;
256
						adj = 0;
255
						break;
257
						break;
256
					  case bDay == 6:
258
					  case bDay == 6:
257
						adj = -1;
259
						adj = -1;
258
						break;
260
						break;
259
					  case bDay == 0:
261
					  case bDay == 0:
260
						adj = -2;
262
						adj = -2;
261
						break;
263
						break;
262
					  case (dayMark + mod) > 5:
264
					  case (dayMark + mod) > 5:
263
						adj = -2;
265
						adj = -2;
264
						break;
266
						break;
265
					  default:
267
					  default:
266
						break;
268
						break;
267
					}
269
					}
268
				} else {
270
				} else {
269
					if (dayDiff < 0) {
271
					if (dayDiff < 0) {
270
						switch (true) {
272
						switch (true) {
271
						  case aDay == 6:
273
						  case aDay == 6:
272
							adj = 0;
274
							adj = 0;
273
							break;
275
							break;
274
						  case aDay == 0:
276
						  case aDay == 0:
275
							adj = 1;
277
							adj = 1;
276
							break;
278
							break;
277
						  case bDay == 6:
279
						  case bDay == 6:
278
							adj = 2;
280
							adj = 2;
279
							break;
281
							break;
280
						  case bDay == 0:
282
						  case bDay == 0:
281
							adj = 1;
283
							adj = 1;
282
							break;
284
							break;
283
						  case (dayMark + mod) < 0:
285
						  case (dayMark + mod) < 0:
284
							adj = 2;
286
							adj = 2;
285
							break;
287
							break;
286
						  default:
288
						  default:
287
							break;
289
							break;
288
						}
290
						}
289
					}
291
					}
290
				}
292
				}
291
				days += adj;
293
				days += adj;
292
				days -= (weeks * 2);
294
				days -= (weeks * 2);
293
			}
295
			}
294
			delta = days;
296
			delta = days;
295
			break;
297
			break;
296
		  case HOUR:
298
		  case HOUR:
297
			delta = houDiff;
299
			delta = houDiff;
298
			break;
300
			break;
299
		  case MINUTE:
301
		  case MINUTE:
300
			delta = minDiff;
302
			delta = minDiff;
301
			break;
303
			break;
302
		  case SECOND:
304
		  case SECOND:
303
			delta = secDiff;
305
			delta = secDiff;
304
			break;
306
			break;
305
		  case MILLISECOND:
307
		  case MILLISECOND:
306
			delta = msDiff;
308
			delta = msDiff;
307
			break;
309
			break;
308
		  default:
310
		  default:
309
			break;
311
			break;
310
		}
312
		}
311
	}
313
	}
312
	return Math.round(delta);
314
	return Math.round(delta);
313
};
315
};
314
 
316