Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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