PageSourceSearch

https://seastreak.com/wp-content/themes/seastreak/assets/js/plugins/date.js

js seastreak.com collected 2026-10-02 07:40:37 UTC 12,759 bytes, 513 lines download raw bytes

1/*
2 * Date prototype extensions. Doesn't depend on any
3 * other code. Doens't overwrite existing methods.
4 *
5 * Adds dayNames, abbrDayNames, monthNames and abbrMonthNames static properties and isLeapYear,
6 * isWeekend, isWeekDay, getDaysInMonth, getDayName, getMonthName, getDayOfYear, getWeekOfYear,
7 * setDayOfYear, addYears, addMonths, addDays, addHours, addMinutes, addSeconds methods
8 *
9 * Copyright (c) 2006 Jörn Zaefferer and Brandon Aaron ([email protected] || http://brandonaaron.net)
10 *
11 * Additional methods and properties added by Kelvin Luck: firstDayOfWeek, dateFormat, zeroTime, asString, fromString -
12 * I've added my name to these methods so you know who to blame if they are broken!
13 * 
14 * Dual licensed under the MIT and GPL licenses:
15 *   http://www.opensource.org/licenses/mit-license.php
16 *   http://www.gnu.org/licenses/gpl.html
17 *
18 */
19
20/**
21 * An Array of day names starting with Sunday.
22 * 
23 * @example dayNames[0]
24 * @result 'Sunday'
25 *
26 * @name dayNames
27 * @type Array
28 * @cat Plugins/Methods/Date
29 */
30Date.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
31
32/**
33 * An Array of abbreviated day names starting with Sun.
34 * 
35 * @example abbrDayNames[0]
36 * @result 'Sun'
37 *
38 * @name abbrDayNames
39 * @type Array
40 * @cat Plugins/Methods/Date
41 */
42Date.abbrDayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
43
44/**
45 * An Array of month names starting with Janurary.
46 * 
47 * @example monthNames[0]
48 * @result 'January'
49 *
50 * @name monthNames
51 * @type Array
52 * @cat Plugins/Methods/Date
53 */
54Date.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
55
56/**
57 * An Array of abbreviated month names starting with Jan.
58 * 
59 * @example abbrMonthNames[0]
60 * @result 'Jan'
61 *
62 * @name monthNames
63 * @type Array
64 * @cat Plugins/Methods/Date
65 */
66Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
67
68/**
69 * The first day of the week for this locale.
70 *
71 * @name firstDayOfWeek
72 * @type Number
73 * @cat Plugins/Methods/Date
74 * @author Kelvin Luck
75 */
76Date.firstDayOfWeek = 1;
77
78/**
79 * The format that string dates should be represented as (e.g. 'dd/mm/yyyy' for UK, 'mm/dd/yyyy' for US, 'yyyy-mm-dd' for Unicode etc).
80 *
81 * @name format
82 * @type String
83 * @cat Plugins/Methods/Date
84 * @author Kelvin Luck
85 */
86Date.format = 'dd/mm/yyyy';
87//Date.format = 'mm/dd/yyyy';
88//Date.format = 'yyyy-mm-dd';
89//Date.format = 'dd mmm yy';
90
91/**
92 * The first two numbers in the century to be used when decoding a two digit year. Since a two digit year is ambiguous (and date.setYear
93 * only works with numbers < 99 and so doesn't allow you to set years after 2000) we need to use this to disambiguate the two digit year codes.
94 *
95 * @name format
96 * @type String
97 * @cat Plugins/Methods/Date
98 * @author Kelvin Luck
99 */
100Date.fullYearStart = '20';
101
102(function() {
103
104	/**
105	 * Adds a given method under the given name 
106	 * to the Date prototype if it doesn't
107	 * currently exist.
108	 *
109	 * @private
110	 */
111	function add(name, method) {
112		if( !Date.prototype[name] ) {
113			Date.prototype[name] = method;
114		}
115	};
116	
117	/**
118	 * Checks if the year is a leap year.
119	 *
120	 * @example var dtm = new Date("01/12/2008");
121	 * dtm.isLeapYear();
122	 * @result true
123	 *
124	 * @name isLeapYear
125	 * @type Boolean
126	 * @cat Plugins/Methods/Date
127	 */
128	add("isLeapYear", function() {
129		var y = this.getFullYear();
130		return (y%4==0 && y%100!=0) || y%400==0;
131	});
132	
133	/**
134	 * Checks if the day is a weekend day (Sat or Sun).
135	 *
136	 * @example var dtm = new Date("01/12/2008");
137	 * dtm.isWeekend();
138	 * @result false
139	 *
140	 * @name isWeekend
141	 * @type Boolean
142	 * @cat Plugins/Methods/Date
143	 */
144	add("isWeekend", function() {
145		return this.getDay()==0 || this.getDay()==6;
146	});
147	
148	/**
149	 * Check if the day is a day of the week (Mon-Fri)
150	 * 
151	 * @example var dtm = new Date("01/12/2008");
152	 * dtm.isWeekDay();
153	 * @result false
154	 * 
155	 * @name isWeekDay
156	 * @type Boolean
157	 * @cat Plugins/Methods/Date
158	 */
159	add("isWeekDay", function() {
160		return !this.isWeekend();
161	});
162	
163	/**
164	 * Gets the number of days in the month.
165	 * 
166	 * @example var dtm = new Date("01/12/2008");
167	 * dtm.getDaysInMonth();
168	 * @result 31
169	 * 
170	 * @name getDaysInMonth
171	 * @type Number
172	 * @cat Plugins/Methods/Date
173	 */
174	add("getDaysInMonth", function() {
175		return [31,(this.isLeapYear() ? 29:28),31,30,31,30,31,31,30,31,30,31][this.getMonth()];
176	});
177	
178	/**
179	 * Gets the name of the day.
180	 * 
181	 * @example var dtm = new Date("01/12/2008");
182	 * dtm.getDayName();
183	 * @result 'Saturday'
184	 * 
185	 * @example var dtm = new Date("01/12/2008");
186	 * dtm.getDayName(true);
187	 * @result 'Sat'
188	 * 
189	 * @param abbreviated Boolean When set to true the name will be abbreviated.
190	 * @name getDayName
191	 * @type String
192	 * @cat Plugins/Methods/Date
193	 */
194	add("getDayName", function(abbreviated) {
195		return abbreviated ? Date.abbrDayNames[this.getDay()] : Date.dayNames[this.getDay()];
196	});
197
198	/**
199	 * Gets the name of the month.
200	 * 
201	 * @example var dtm = new Date("01/12/2008");
202	 * dtm.getMonthName();
203	 * @result 'Janurary'
204	 *
205	 * @example var dtm = new Date("01/12/2008");
206	 * dtm.getMonthName(true);
207	 * @result 'Jan'
208	 * 
209	 * @param abbreviated Boolean When set to true the name will be abbreviated.
210	 * @name getDayName
211	 * @type String
212	 * @cat Plugins/Methods/Date
213	 */
214	add("getMonthName", function(abbreviated) {
215		return abbreviated ? Date.abbrMonthNames[this.getMonth()] : Date.monthNames[this.getMonth()];
216	});
217
218	/**
219	 * Get the number of the day of the year.
220	 * 
221	 * @example var dtm = new Date("01/12/2008");
222	 * dtm.getDayOfYear();
223	 * @result 11
224	 * 
225	 * @name getDayOfYear
226	 * @type Number
227	 * @cat Plugins/Methods/Date
228	 */
229	add("getDayOfYear", function() {
230		var tmpdtm = new Date("1/1/" + this.getFullYear());
231		return Math.floor((this.getTime() - tmpdtm.getTime()) / 86400000);
232	});
233	
234	/**
235	 * Get the number of the week of the year.
236	 * 
237	 * @example var dtm = new Date("01/12/2008");
238	 * dtm.getWeekOfYear();
239	 * @result 2
240	 * 
241	 * @name getWeekOfYear
242	 * @type Number
243	 * @cat Plugins/Methods/Date
244	 */
245	add("getWeekOfYear", function() {
246		return Math.ceil(this.getDayOfYear() / 7);
247	});
248
249	/**
250	 * Set the day of the year.
251	 * 
252	 * @example var dtm = new Date("01/12/2008");
253	 * dtm.setDayOfYear(1);
254	 * dtm.toString();
255	 * @result 'Tue Jan 01 2008 00:00:00'
256	 * 
257	 * @name setDayOfYear
258	 * @type Date
259	 * @cat Plugins/Methods/Date
260	 */
261	add("setDayOfYear", function(day) {
262		this.setMonth(0);
263		this.setDate(day);
264		return this;
265	});
266	
267	/**
268	 * Add a number of years to the date object.
269	 * 
270	 * @example var dtm = new Date("01/12/2008");
271	 * dtm.addYears(1);
272	 * dtm.toString();
273	 * @result 'Mon Jan 12 2009 00:00:00'
274	 * 
275	 * @name addYears
276	 * @type Date
277	 * @cat Plugins/Methods/Date
278	 */
279	add("addYears", function(num) {
280		this.setFullYear(this.getFullYear() + num);
281		return this;
282	});
283	
284	/**
285	 * Add a number of months to the date object.
286	 * 
287	 * @example var dtm = new Date("01/12/2008");
288	 * dtm.addMonths(1);
289	 * dtm.toString();
290	 * @result 'Tue Feb 12 2008 00:00:00'
291	 * 
292	 * @name addMonths
293	 * @type Date
294	 * @cat Plugins/Methods/Date
295	 */
296	add("addMonths", function(num) {
297		var tmpdtm = this.getDate();
298		
299		this.setMonth(this.getMonth() + num);
300		
301		if (tmpdtm > this.getDate())
302			this.addDays(-this.getDate());
303		
304		return this;
305	});
306	
307	/**
308	 * Add a number of days to the date object.
309	 * 
310	 * @example var dtm = new Date("01/12/2008");
311	 * dtm.addDays(1);
312	 * dtm.toString();
313	 * @result 'Sun Jan 13 2008 00:00:00'
314	 * 
315	 * @name addDays
316	 * @type Date
317	 * @cat Plugins/Methods/Date
318	 */
319	add("addDays", function(num) {
320		var timezoneOffsetBefore = this.getTimezoneOffset(),
321			timezoneOffsetAfter;
322        this.setTime(this.getTime() + (num*86400000) );
323        timezoneOffsetAfter = this.getTimezoneOffset();
324
325        // If the timezone has changed between days then adjust the time to reflect this
326        if(timezoneOffsetAfter !== timezoneOffsetBefore){
327                this.setTime(this.getTime() + ((timezoneOffsetAfter-timezoneOffsetBefore) * 60 * 1000));
328        }
329		return this;
330	});
331	
332	/**
333	 * Add a number of hours to the date object.
334	 * 
335	 * @example var dtm = new Date("01/12/2008");
336	 * dtm.addHours(24);
337	 * dtm.toString();
338	 * @result 'Sun Jan 13 2008 00:00:00'
339	 * 
340	 * @name addHours
341	 * @type Date
342	 * @cat Plugins/Methods/Date
343	 */
344	add("addHours", function(num) {
345		this.setHours(this.getHours() + num);
346		return this;
347	});
348
349	/**
350	 * Add a number of minutes to the date object.
351	 * 
352	 * @example var dtm = new Date("01/12/2008");
353	 * dtm.addMinutes(60);
354	 * dtm.toString();
355	 * @result 'Sat Jan 12 2008 01:00:00'
356	 * 
357	 * @name addMinutes
358	 * @type Date
359	 * @cat Plugins/Methods/Date
360	 */
361	add("addMinutes", function(num) {
362		this.setMinutes(this.getMinutes() + num);
363		return this;
364	});
365	
366	/**
367	 * Add a number of seconds to the date object.
368	 * 
369	 * @example var dtm = new Date("01/12/2008");
370	 * dtm.addSeconds(60);
371	 * dtm.toString();
372	 * @result 'Sat Jan 12 2008 00:01:00'
373	 * 
374	 * @name addSeconds
375	 * @type Date
376	 * @cat Plugins/Methods/Date
377	 */
378	add("addSeconds", function(num) {
379		this.setSeconds(this.getSeconds() + num);
380		return this;
381	});
382	
383	/**
384	 * Sets the time component of this Date to zero for cleaner, easier comparison of dates where time is not relevant.
385	 * 
386	 * @example var dtm = new Date();
387	 * dtm.zeroTime();
388	 * dtm.toString();
389	 * @result 'Sat Jan 12 2008 00:01:00'
390	 * 
391	 * @name zeroTime
392	 * @type Date
393	 * @cat Plugins/Methods/Date
394	 * @author Kelvin Luck
395	 */
396	add("zeroTime", function() {
397		this.setMilliseconds(0);
398		this.setSeconds(0);
399		this.setMinutes(0);
400		this.setHours(0);
401		return this;
402	});
403	
404	/**
405	 * Returns a string representation of the date object according to Date.format.
406	 * (Date.toString may be used in other places so I purposefully didn't overwrite it)
407	 * 
408	 * @example var dtm = new Date("01/12/2008");
409	 * dtm.asString();
410	 * @result '12/01/2008' // (where Date.format == 'dd/mm/yyyy'
411	 * 
412	 * @name asString
413	 * @type Date
414	 * @cat Plugins/Methods/Date
415	 * @author Kelvin Luck
416	 */
417	add("asString", function(format) {
418		var r = format || Date.format;
419		return r
420			.split('yyyy').join(this.getFullYear())
421			.split('yy').join((this.getFullYear() + '').substring(2))
422			.split('dd').join(_zeroPad(this.getDate()))
423			.split('d').join(this.getDate())
424			.split('DD').join(this.getDayName(false))
425			.split('D').join(this.getDayName(true))
426			.split('mmmm').join(this.getMonthName(false))
427			.split('mmm').join(this.getMonthName(true))
428			.split('mm').join(_zeroPad(this.getMonth()+1))
429			.split('hh').join(_zeroPad(this.getHours()))
430			.split('min').join(_zeroPad(this.getMinutes()))
431			.split('ss').join(_zeroPad(this.getSeconds()));
432	});
433	
434	/**
435	 * Returns a new date object created from the passed String according to Date.format or false if the attempt to do this results in an invali
435d date object
436	 * (We can't simple use Date.parse as it's not aware of locale and I chose not to overwrite it incase it's functionality is being relied on elsewhere)
437	 *
438	 * @example var dtm = Date.fromString("12/01/2008");
439	 * dtm.toString();
440	 * @result 'Sat Jan 12 2008 00:00:00' // (where Date.format == 'dd/mm/yyyy'
441	 * 
442	 * @name fromString
443	 * @type Date
444	 * @cat Plugins/Methods/Date
445	 * @author Kelvin Luck
446	 */
447	Date.fromString = function(s, format)
448	{
449		var f = format || Date.format,
450		    d = new Date('01/01/1977'),
451		    mLength = 0,
452		    iM, iD, iY,
453		    i, mStr;
454
455		iM = f.indexOf('mmmm');
456		if (iM > -1) {
457			for (i=0; i<Date.monthNames.length; i++) {
458				mStr = s.substr(iM, Date.monthNames[i].length);
459				if (Date.monthNames[i] == mStr) {
460					mLength = Date.monthNames[i].length - 4;
461					break;
462				}
463			}
464			d.setMonth(i);
465		} else {
466			iM = f.indexOf('mmm');
467			if (iM > -1) {
468				mStr = s.substr(iM, 3);
469				for (i=0; i<Date.abbrMonthNames.length; i++) {
470					if (Date.abbrMonthNames[i] == mStr) break;
471				}
472				d.setMonth(i);
473			} else {
474				d.setMonth(Number(s.substr(f.indexOf('mm'), 2)) - 1);
475			}
476		}
477		
478		iY = f.indexOf('yyyy');
479
480		if (iY > -1) {
481			if (iM < iY)
482			{
483				iY += mLength;
484			}
485			d.setFullYear(Number(s.substr(iY, 4)));
486		} else {
487			if (iM < iY)
488			{
489				iY += mLength;
490			}
491			// TODO - this doesn't work very well - are there any rules for what is meant by a two digit year?
492			d.setFullYear(Number(Date.fullYearStart + s.substr(f.indexOf('yy'), 2)));
493		}
494		iD = f.indexOf('dd');
495		if (iM < iD)
496		{
497			iD += mLength;
498		}
499		d.setDate(Number(s.substr(iD, 2)));
500		if (isNaN(d.getTime())) {
501			return false;
502		}
503		return d;
504	};
505	
506	// utility method
507	var _zeroPad = function(num) {
508		var s = '0'+num;
509		return s.substring(s.length-2)
510		//return ('0'+num).substring(-2); // doesn't work on IE :(
511	};
512	
513})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.