<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
* +-------------------------------------------------------------------------+
* | jsPro - Date Test Page |
* +-------------------------------------------------------------------------+
* | Copyright (C) 2001-2003 Stuart Wigley |
* +-------------------------------------------------------------------------+
* | This library is free software; you can redistribute it and/or modify it |
* | under the terms of the GNU Lesser General Public License as published by|
* | the Free Software Foundation; either version 2.1 of the License, or (at |
* | your option) any later version. |
* | |
* | This library is distributed in the hope that it will be useful, but |
* | WITHOUT ANY WARRANTY; without even the implied warranty of |
* | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |
* | General Public License for more details. |
* | |
* | You should have received a copy of the GNU Lesser General Public License|
* | along with this library; if not, write to the Free Software Foundation, |
* | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* +-------------------------------------------------------------------------+
* | Authors: Stuart Wigley <[email protected]> |
* +-------------------------------------------------------------------------+
* $Id: date.html,v 1.5 2003/10/01 10:02:15 wigleys Exp $
-->
<html>
<head>
<title>jsPro - Date</title>
<!-- error.js -->
<script type="text/javascript">
/**
* +-------------------------------------------------------------------------+
* | jsPro - Error |
* +-------------------------------------------------------------------------+
* | Copyright (C) 2001-2003 Stuart Wigley |
* +-------------------------------------------------------------------------+
* | This library is free software; you can redistribute it and/or modify it |
* | under the terms of the GNU Lesser General Public License as published by|
* | the Free Software Foundation; either version 2.1 of the License, or (at |
* | your option) any later version. |
* | |
* | This library is distributed in the hope that it will be useful, but |
* | WITHOUT ANY WARRANTY; without even the implied warranty of |
* | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |
* | General Public License for more details. |
* | |
* | You should have received a copy of the GNU Lesser General Public License|
* | along with this library; if not, write to the Free Software Foundation, |
* | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* +-------------------------------------------------------------------------+
* | Authors: Stuart Wigley <[email protected]> |
* | Randolph Fielding <[email protected]> |
* +-------------------------------------------------------------------------+
* $Id: error.js,v 1.15 2003/09/22 04:41:10 gator4life Exp $
*/
/**
* Property used in <code>Error.handleError</code> to specify how errors are
* reported. Permissable values are:
*
* 0 No errors are reported.
* 1 Report the error name and error message using the status bar of the
* active browser window.
* 2 Report the error name and error message using an alert box.
* 3 Report the error name, error message and debug message using an alert
* box.
* 4 Report the error name, error message and debug message using a debug
* window. An instance of the Debug() class must be available.
*/
Error.prototype.debugLevel = 4;
/**
* Uses <code>Error.debugLevel</code> to control how errors are reported. If
* <code>Error.debugLevel</code> is set to 4, you must substitute the name of
* your <code>Debug()</code> instance for <code>oDebug</code> in the line
* <code>var jsProDebugWindow = oDebug</code>.
*
* @summary handles thrown exceptions
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 09/03/03
* @interface <code>Error.handleError()</code>
* @requires <code>Debug.print(vMixedValue, sMessageType)</code>
* @see <code>Debug()</code>
* @see <code>Debug.print()</code>
*/
Error.prototype.handleError = function() {
var sDebugMessage = this.debug;
var sErrorMessage = (sDebugMessage) ? sDebugMessage : '';
switch (this.debugLevel) { case 0 : break; case 1 :
window.status = this.name + ': ' + this.message; break; case 2 :
window.alert(this.name + '\n\n' + this.message); break; case 3 :
window.alert(this.name + '\n\n' + this.message + '\n\n' + sErrorMessage); break; case 4 :
var jsProDebugWindow = oDebug; if (jsProDebugWindow) {
var oDebugWindow = jsProDebugWindow.debugWindow; if (oDebugWindow && !oDebugWindow.closed) {
jsProDebugWindow.print(this.name + ' ' + this.message + ' ' + sErrorMessage, 1);
}
}
}
}
/**
* Creates an object that is a subclass of Error for handling
* ArrayIndexOutOfBounds exceptions.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 06/27/03
* @interface <code>new ArrayIndexOutOfBoundsException(sMethodName,
* iIndex, iArrayLength)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param iIndex the index of a hypothetical array member attempting to
* be accessed
* @param iArrayLength the length of the array
*/ function ArrayIndexOutOfBoundsException(sMethodName, iIndex, iArrayLength) {
this.name = 'ArrayIndexOutOfBoundsException'; this.message = sMethodName + ' has been accessed with an illegal index that is either negative or greater than the size of the array.'; this.debug = 'Attempting to access index ' + iIndex.toString() + ', but array has an index range of 0 to ' + (iArrayLength - 1).toString() + '.';
}
ArrayIndexOutOfBoundsException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling IllegalArgument
* exceptions.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 07/24/03
* @interface <code>new IllegalArgumentException(sMethodName,
* vExpectedArgs, iActualArgs)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param vExpectedArgs the number of arguments expected
* @param iActualArgs the number of arguments received
*/ function IllegalArgumentException(sMethodName, vExpectedArgs, iActualArgs) {
this.name = 'IllegalArgumentException'; this.message = sMethodName + ' has been passed an illegal number of arguments.'; this.debug = 'Expected ' + vExpectedArgs.toString() + ' argument(s), but received ' + iActualArgs.toString() + ' argument(s).';
}
IllegalArgumentException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling IllegalValue
* exceptions.
*
* @author Randolph Fielding
* @version 1.0, 09/22/03
* @interface <code>new IllegalValueException(sMethodName,
* sVariableName, vExpectedVal, vActualVal)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param sVariableName the name of the variable containing the illegal value
* @param vExpectedVal the value expected in the variable containing the
* illegal value
* @param vActualVal the value currently in the variable containing the
* illegal value
*/ function IllegalValueException(sMethodName, sVariableName, vExpectedVal, vActualVal) {
this.name = 'IllegalValueException'; this.message = sMethodName + ' has encountered an illegal value in variable ' + sVariableName + '.' this.debug = 'Expected a value of ' + vExpectedVal.toString() + ', but contains a value of ' + vActualVal.toString() + '.'
}
IllegalValueException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling
* MethodNotAvailable exceptions.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 06/27/03
* @interface <code>new MethodNotAvailableException(sMethodName,
* sMethodNameNA)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param sMethodNameNA the name of the method that was not available
*/ function MethodNotAvailableException(sMethodName, sMethodNameNA) {
this.name = 'MethodNotAvailableException'; this.message = 'A method has been called that is not available.'; this.debug = sMethodName + ' attempted to call ' + sMethodNameNA + '.';
}
MethodNotAvailableException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling
* PropertyNotAvailable exceptions.
*
* @author Randolph Fielding
* @version 1.1, 08/01/03
* @interface <code>new PropertyNotAvailableException(sMethodName,
* sPropNameNA)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param sPropNameNA the name of the property that was not available
*/ function PropertyNotAvailableException(sMethodName, sPropNameNA) {
this.name = 'PropertyNotAvailableException'; this.message = 'A property has been accessed that is not available.'; this.debug = sMethodName + ' attempted to access ' + sPropNameNA + '.';
}
PropertyNotAvailableException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling TypeMismatch
* exceptions.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 07/24/03
* @interface <code>new TypeMismatchException(sMethodName,
* sExpectedType, sActualType)</code>
* @param sMethodName the name of the method where the exception was thrown
* @param sExpectedType the name of the expected type of an argument
* @param sActualType the name of the actual type of an argument
*/ function TypeMismatchException(sMethodName, sExpectedType, sActualType) {
this.name = 'TypeMismatchException'; this.message = sMethodName + ' has been passed an argument with an illegal or inappropriate type.'; this.debug = 'Expected an argument with a type of ' + sExpectedType + ', but received an argument with a type of ' + sActualType + '.';
}
TypeMismatchException.prototype = new Error();
/**
* Creates an object that is a subclass of Error for handling Unknown
* exceptions.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 06/27/03
* @interface <code>new UnknownException(sMethodName)</code>
* @param sMethodName the name of the method where the exception was thrown
*/ function UnknownException(sMethodName) {
this.name = 'UnknownException'; this.message = 'An unknown error has occurred in ' + sMethodName + '.';
}
UnknownException.prototype = new Error();
</script>
<!-- debug.js -->
<script type="text/javascript">
/**
* +-------------------------------------------------------------------------+
* | jsPro - Debug |
* +-------------------------------------------------------------------------+
* | Copyright (C) 2001-2003 Stuart Wigley |
* +-------------------------------------------------------------------------+
* | This library is free software; you can redistribute it and/or modify it |
* | under the terms of the GNU Lesser General Public License as published by|
* | the Free Software Foundation; either version 2.1 of the License, or (at |
* | your option) any later version. |
* | |
* | This library is distributed in the hope that it will be useful, but |
* | WITHOUT ANY WARRANTY; without even the implied warranty of |
* | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |
* | General Public License for more details. |
* | |
* | You should have received a copy of the GNU Lesser General Public License|
* | along with this library; if not, write to the Free Software Foundation, |
* | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* +-------------------------------------------------------------------------+
* | Authors: Stuart Wigley <[email protected]> |
* | Randolph Fielding <[email protected]> |
* +-------------------------------------------------------------------------+
* $Id: debug.js,v 1.6 2003/09/22 05:07:41 gator4life Exp $
*/
/**
* Creates an object that opens a window for debugging.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 09/05/03
* @interface <code>new Debug()</code>
*/ function Debug() {
/**
* Clears the contents of the debug window.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 09/05/03
* @interface <code>Debug.clear()</code>
* @return <code>true</code> if no exceptions are encountered
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws UnknownException
*/
Debug.prototype.clear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments != 0) { throw vError = new IllegalArgumentException('Debug.clear', 0, iNumArguments);
}
var oMessageContainer = document.getElementById('messageContainer');
if (!oMessageContainer) { throw vError = new UnknownException('Debug.clear');
}
while (oMessageContainer.hasChildNodes()) {
oMessageContainer.removeChild(oMessageContainer.firstChild);
}
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : true;
}
}
/**
* Displays content within the debug window.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 09/05/03
* @interface <code>Debug.print(vMixedValue)</code>
* @interface <code>Debug.print(vMixedValue, iMessageType)</code>
* @param vMixedValue content to be displayed within the debug window
* @param iMessageType an integer representing the type of content to display
* within the debug window (information: 0; error: 1)
* (optional)
* @return <code>true</code> if no exceptions are encountered
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws IllegalValueException
* @throws TypeMismatchException
* @throws UnknownException
*/
Debug.prototype.print = function(vMixedValue) {
try {
var vError = null;
var iNumArguments = arguments.length;
var iMessageType = 0;
if ((iNumArguments < 1) || (iNumArguments > 2)) { throw vError = new IllegalArgumentException('Debug.print', '1 or 2', iNumArguments);
} else if (iNumArguments == 2) {
iMessageType = arguments[1];
}
if ((typeof iMessageType != 'number') || (iMessageType.toString().indexOf('.') != -1)) { throw vError = new TypeMismatchException('Debug.print', 'integer', typeof iMessageType);
}
if ((iMessageType != 0) && (iMessageType != 1)) { throw vError = new IllegalValueException('Debug.print', 'iMessageType', '0 or 1', iMessageType);
}
var oDebugWindow = this.debugWindow;
if (!oDebugWindow || oDebugWindow.closed) { throw vError = new UnknownException('Debug.print');
}
var oDocument = oDebugWindow.document;
if (!oDocument) { throw vError = new UnknownException('Debug.print');
}
var oMessageContainer = oDocument.getElementById('messageContainer');
if (!oMessageContainer) { throw vError = new UnknownException('Debug.print');
}
var oTitleRow = oDocument.createElement('tr');
var oTitleCell = oDocument.createElement('td');
var oBodyRow = oDocument.createElement('tr');
var oBodyCell = oDocument.createElement('td');
if (!oTitleRow || !oTitleCell || !oBodyRow || !oBodyCell) { throw vError = new UnknownException('Debug.print');
}
var oTitleRowStyle = oTitleRow.style;
if (oTitleRowStyle) {
oTitleRowStyle.backgroundColor = '#EEE';
oTitleRowStyle.fontWeight = 700;
}
var sOutputString = vMixedValue.toString();
var sTitle = 'info';
var sBody = sOutputString;
if (iMessageType == 1) {
sTitle = sOutputString.match(/\w+/);
sBody = sOutputString.replace(/\w+/, '');
var oBodyCellStyle = oBodyCell.style; if (oBodyCellStyle) {
oBodyCell.style.backgroundColor = '#FCC';
}
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : true;
}
}
</script>
<!-- test.js -->
<script type="text/javascript">
/**
* +-------------------------------------------------------------------------+
* | jsPro - Test |
* +-------------------------------------------------------------------------+
* | Copyright (C) 2001-2003 Stuart Wigley |
* +-------------------------------------------------------------------------+
* | This library is free software; you can redistribute it and/or modify it |
* | under the terms of the GNU Lesser General Public License as published by|
* | the Free Software Foundation; either version 2.1 of the License, or (at |
* | your option) any later version. |
* | |
* | This library is distributed in the hope that it will be useful, but |
* | WITHOUT ANY WARRANTY; without even the implied warranty of |
* | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |
* | General Public License for more details. |
* | |
* | You should have received a copy of the GNU Lesser General Public License|
* | along with this library; if not, write to the Free Software Foundation, |
* | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* +-------------------------------------------------------------------------+
* | Authors: Stuart Wigley <[email protected]> |
* | Randolph Fielding <[email protected]> |
* +-------------------------------------------------------------------------+
* $Id: test.js,v 1.6 2003/09/15 05:07:09 gator4life Exp $
*/
/**
* Creates an object that provides methods for testing all jsPro libraries.
*
* @author Stuart Wigley
* @version 1.0, 07/24/03
* @interface <code>new Test()</code>
*/ function Test() { }
/**
* Evaluates and returns the result of a jsPro method using assumptions about
* the structure and ids of HTML elements in the jsPro HTML test files.
*
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/20/03
* @interface <code>Test.evaluateMethod(oButton, sClass)</code>
* @param oButton the HTML input-button element that is clicked
* @param sClass the name of the jsPro class instance being tested
* @return the result of attempting to evaluate a jsPro method
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws TypeMismatchException
*/
Test.prototype.evaluateMethod = function(oButton, sClass) {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments != 2) { throw vError = new IllegalArgumentException('Error.evaluateMethod', 2, iNumArguments);
}
if (typeof oButton != 'object') { throw vError = new TypeMismatchException('Error.evaluateMethod', 'object', typeof oButton);
}
if (typeof sClass != 'string') { throw vError = new TypeMismatchException('Error.evaluateMethod', 'string', typeof sClass);
}
var sMethodName = oButton.id;
var oInput1 = document.getElementById(sMethodName + '1');
var oInput2 = document.getElementById(sMethodName + '2');
var oInput3 = document.getElementById(sMethodName + '3');
var oOutput = document.getElementById(sMethodName + 'Result');
var sArguments = '';
if (oInput1) {
var sInput1Value = oInput1.value; if (sInput1Value != '') {
var fInput1Value = parseFloat(sInput1Value);
sArguments += (isNaN(fInput1Value)) ? '\'' + sInput1Value + '\'' : fInput1Value;
}
}
if (oInput2) {
var sInput2Value = oInput2.value; if (sInput2Value != '') {
var fInput2Value = parseFloat(sInput2Value);
sArguments += (isNaN(fInput2Value)) ? ', \'' + sInput2Value + '\'' : ', ' + fInput2Value;
}
}
if (oInput3) {
var sInput3Value = oInput3.value; if (sInput3Value != '') {
var fInput3Value = parseFloat(sInput3Value);
sArguments += (isNaN(fInput3Value)) ? ', \'' + sInput3Value + '\'' : ', ' + fInput3Value;
}
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
if (oOutput) {
oOutput.value = vResult;
}
}
}
</script>
<!-- date.js -->
<script type="text/javascript">
/**
* +-------------------------------------------------------------------------+
* | jsPro - Date |
* +-------------------------------------------------------------------------+
* | Copyright (C) 2001-2003 Stuart Wigley |
* +-------------------------------------------------------------------------+
* | This library is free software; you can redistribute it and/or modify it |
* | under the terms of the GNU Lesser General Public License as published by|
* | the Free Software Foundation; either version 2.1 of the License, or (at |
* | your option) any later version. |
* | |
* | This library is distributed in the hope that it will be useful, but |
* | WITHOUT ANY WARRANTY; without even the implied warranty of |
* | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |
* | General Public License for more details. |
* | |
* | You should have received a copy of the GNU Lesser General Public License|
* | along with this library; if not, write to the Free Software Foundation, |
* | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* +-------------------------------------------------------------------------+
* | Authors: Stuart Wigley <[email protected]> |
* | Randolph Fielding <[email protected]> |
* +-------------------------------------------------------------------------+
* $Id: date.js,v 1.8 2003/10/01 10:02:14 wigleys Exp $
*/
/**
* Implements the functionality within the date() function of PHP and returns
* this date formatted according to the specified format string. See
* http://www.php.net/manual/en/function.date.php for more information.
*
* The following list of string characters are recognized in the specified
* format string:
*
* a - Lowercase Ante Meridiem/Post Meridiem ('am' or 'pm')
* A - Uppercase Ante Meridiem/Post Meridiem ('AM' or 'PM')
* B - Swatch Internet Time ('@000' to '@999')
* d - Day of month with leading zeroes ('01' to '31')
* D - Three-letter, shortened name of day of week ('Mon' to 'Sun')
* F - Full name of month of year ('January' to 'December')
* g - 12-hour format of hour of day without leading zeros ('1' to '12')
* G - 24-hour format of hour of day without leading zeros ('0' to '23')
* h - 12-hour format of hour of day with leading zeros ('01' to '12')
* H - 24-hour format of hour of day with leading zeros ('00' to '23')
* i - Minutes of hour with leading zeros ('00' to '59')
* I - << NOT IMPLEMENTED >>
* j - Day of month without leading zeros ('1' to '31')
* l - Full name of day of week ('Monday' to 'Sunday')
* L - Leap year or not? ('1' for true or '0' for false)
* m - Month of year with leading zeros ('01' to '12')
* M - Three-letter, shortened name of month of year ('Jan' to 'Dec')
* n - Month of year without leading zeros ('1' to '12')
* O - Greenwich Mean Time (GMT) offset ('[+/-]HHMM')
* r - RFC 822 format (e.g. 'Thu, 21 Dec 2000 16:01:07 +0200')
* s - Seconds of minute with leading zeros ('00' to '59')
* S - Ordinal suffix (in English) of day of month ('st', 'nd', 'rd' or 'th')
* t - Days in month ('28' to '31')
* T - << NOT IMPLEMENTED >>
* U - Seconds since the UNIX epoch (1 Jan 1970 00:00:00 GMT)
* w - Day of week ('0' for Sunday to '6' for Saturday)
* W - ISO 8601 week number of year ('01' to '53')
* y - Two-digit year (e.g. '99' or '03')
* Y - Four-digit year (e.g. '1999' or '2003')
* z - Day of year ('1' to '366')
* Z - Greenwich Mean Time (GMT) offset in seconds ('-43200' to '43200')
*
* @summary format date
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/18/03
* @interface <code>Date.formatDate(sFormatString)</code>
* @requires <code>Date.getDayOfYear()</code>
* @requires <code>Date.getDaysInMonth()</code>
* @requires <code>Date.getGMTOffset()</code>
* @requires <code>Date.getLong12Hours()</code>
* @requires <code>Date.getLong24Hours()</code>
* @requires <code>Date.getLongDate()</code>
* @requires <code>Date.getLongDayName()</code>
* @requires <code>Date.getLongMinutes()</code>
* @requires <code>Date.getLongMonth()</code>
* @requires <code>Date.getLongMonthName()</code>
* @requires <code>Date.getLongSeconds()</code>
* @requires <code>Date.getMeridiem()</code>
* @requires <code>Date.getOrdinalSuffix()</code>
* @requires <code>Date.getRFC822Date()</code>
* @requires <code>Date.getShort12Hours()</code>
* @requires <code>Date.getShort24Hours()</code>
* @requires <code>Date.getShortDayName()</code>
* @requires <code>Date.getShortMonth()</code>
* @requires <code>Date.getShortMonthName()</code>
* @requires <code>Date.getShortYear()</code>
* @requires <code>Date.getSwatchTime()</code>
* @requires <code>Date.getTimeSeconds()</code>
* @requires <code>Date.getTimezone()</code>
* @requires <code>Date.getTimezoneOffsetSeconds()</code>
* @requires <code>Date.getWeekOfYear()</code>
* @requires <code>Date.isDaylightSavingsTime()</code>
* @requires <code>Date.isLeapYear()</code>
* @param sFormatString the string to format against
* @return the formatted date string
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws TypeMismatchException
* @throws UnknownException
* @see <code>Date.getDayOfYear()</code>
* @see <code>Date.getDaysInMonth()</code>
* @see <code>Date.getGMTOffset()</code>
* @see <code>Date.getLong12Hours()</code>
* @see <code>Date.getLong24Hours()</code>
* @see <code>Date.getLongDate()</code>
* @see <code>Date.getLongDayName()</code>
* @see <code>Date.getLongMinutes()</code>
* @see <code>Date.getLongMonth()</code>
* @see <code>Date.getLongMonthName()</code>
* @see <code>Date.getLongSeconds()</code>
* @see <code>Date.getMeridiem()</code>
* @see <code>Date.getOrdinalSuffix()</code>
* @see <code>Date.getRFC822Date()</code>
* @see <code>Date.getShort12Hours()</code>
* @see <code>Date.getShort24Hours()</code>
* @see <code>Date.getShortDayName()</code>
* @see <code>Date.getShortMonth()</code>
* @see <code>Date.getShortMonthName()</code>
* @see <code>Date.getShortYear()</code>
* @see <code>Date.getSwatchTime()</code>
* @see <code>Date.getTimeSeconds()</code>
* @see <code>Date.getTimezone()</code>
* @see <code>Date.getTimezoneOffsetSeconds()</code>
* @see <code>Date.getWeekOfYear()</code>
* @see <code>Date.isDaylightSavingsTime()</code>
* @see <code>Date.isLeapYear()</code>
*/
Date.prototype.formatDate = function(sFormatString) {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('getDayOfYear' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getDayOfYear');
}
if (!('getDaysInMonth' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getDaysInMonth');
}
if (!('getGMTOffset' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getGMTOffset');
}
if (!('getLong12Hours' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLong12Hours');
}
if (!('getLong24Hours' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLong24Hours');
}
if (!('getLongDate' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongDate');
}
if (!('getLongDayName' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongDayName');
}
if (!('getLongMinutes' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMinutes');
}
if (!('getLongMonth' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMonth');
}
if (!('getLongMonthName' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMonthName');
}
if (!('getLongSeconds' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongSeconds');
}
if (!('getMeridiem' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getMeridiem');
}
if (!('getOrdinalSuffix' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getOrdinalSuffix');
}
if (!('getRFC822Date' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getRFC822Date');
}
if (!('getShort12Hours' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShort12Hours');
}
if (!('getShort24Hours' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShort24Hours');
}
if (!('getShortDayName' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortDayName');
}
if (!('getShortMonth' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortMonth');
}
if (!('getShortMonthName' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortMonthName');
}
if (!('getShortYear' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortYear');
}
if (!('getSwatchTime' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getSwatchTime');
}
if (!('getTimeSeconds' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimeSeconds');
}
if (!('getTimezone' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimezone');
}
if (!('getTimezoneOffsetSeconds' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimezoneOffsetSeconds');
}
if (!('getWeekOfYear' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getWeekOfYear');
}
if (!('isDaylightSavingsTime' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.isDaylightSavingsTime');
}
if (!('isLeapYear' in this)) { throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.isLeapYear');
}
if (iNumArguments != 1) { throw vError = new IllegalArgumentException('Date.formatDate', 1, iNumArguments);
}
if (typeof sFormatString != 'string') { throw vError = new TypeMismatchException('Date.formatDate', 'string', typeof sFormatString);
}
var sDayOfYear = this.getDayOfYear();
var sDaysInMonth = this.getDaysInMonth();
var sGMTOffset = this.getGMTOffset();
var sIsDaylightSavingsTime = this.isDaylightSavingsTime();
var sIsLeapYear = this.isLeapYear();
var sLong12Hours = this.getLong12Hours();
var sLong24Hours = this.getLong24Hours();
var sLongDate = this.getLongDate();
var sLongDayName = this.getLongDayName();
var sLongMinutes = this.getLongMinutes();
var sLongMonth = this.getLongMonth();
var sLongMonthName = this.getLongMonthName();
var sLongSeconds = this.getLongSeconds();
var sMeridiem = this.getMeridiem();
var sOrdinalSuffix = this.getOrdinalSuffix();
var sRFC822Date = this.getRFC822Date();
var sShort12Hours = this.getShort12Hours();
var sShort24Hours = this.getShort24Hours();
var sShortDayName = this.getShortDayName();
var sShortMonth = this.getShortMonth();
var sShortMonthName = this.getShortMonthName();
var sShortYear = this.getShortYear();
var sSwatchTime = this.getSwatchTime();
var sTimeSeconds = this.getTimeSeconds();
var sTimezone = this.getTimezone();
var sTimezoneOffsetSeconds = this.getTimezoneOffsetSeconds();
var sWeekOfYear = this.getWeekOfYear();
var sFormatStringLength = sFormatString.length;
var sFormattedDate = '';
for (var i = 0; i < sFormatStringLength; i++) {
var sChar = sFormatString.charAt(i); switch (sChar) { case 'a' : sFormattedDate += sMeridiem; break; case 'A' : sFormattedDate += sMeridiem.toUpperCase(); break; case 'B' : sFormattedDate += sSwatchTime; break; case 'd' : sFormattedDate += sLongDate; break; case 'D' : sFormattedDate += sShortDayName; break; case 'F' : sFormattedDate += sLongMonthName; break; case 'g' : sFormattedDate += sShort12Hours; break; case 'G' : sFormattedDate += sShort24Hours; break; case 'h' : sFormattedDate += sLong12Hours; break; case 'H' : sFormattedDate += sLong24Hours; break; case 'i' : sFormattedDate += sLongMinutes; break; case 'I' : sFormattedDate += sIsDaylightSavingsTime; break; case 'j' : sFormattedDate += this.getDate().toString(); break; case 'l' : sFormattedDate += sLongDayName; break; case 'L' : sFormattedDate += sIsLeapYear; break; case 'm' : sFormattedDate += sLongMonth; break; case 'M' : sFormattedDate += sShortMonthName; break; case 'n' : sFormattedDate += sShortMonth; break; case 'O' : sFormattedDate += sGMTOffset; break; case 'r' : sFormattedDate += sRFC822Date; break; case 's' : sFormattedDate += sLongSeconds; break; case 'S' : sFormattedDate += sOrdinalSuffix; break; case 't' : sFormattedDate += sDaysInMonth; break; case 'T' : sFormattedDate += sTimezone; break; case 'U' : sFormattedDate += sTimeSeconds; break; case 'w' : sFormattedDate += this.getDay().toString(); break; case 'W' : sFormattedDate += sWeekOfYear; break; case 'y' : sFormattedDate += sShortYear; break; case 'Y' : sFormattedDate += this.getFullYear().toString(); break; case 'z' : sFormattedDate += sDayOfYear; break; case 'Z' : sFormattedDate += sTimezoneOffsetSeconds; break; default : sFormattedDate += sChar;
}
}
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sFormattedDate;
}
}
/**
* Returns the day of the year for this date as a one-, two-, or three-digit
* string between '1' and '366', inclusive.
*
* @summary day of year
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/12/03
* @interface <code>Date.getDayOfYear()</code>
* @requires <code>Date.isLeapYear()</code>
* @return the day of the year for this date as a one-, two-, or
* three-digit string between '1' and '366', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.isLeapYear()</code>
*/
Date.prototype.getDayOfYear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('isLeapYear' in this)) { throw vError = new MethodNotAvailableException('Date.getDayOfYear', 'Date.isLeapYear');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getDayOfYear', 0, iNumArguments);
}
var iMonth = this.getMonth();
var sIsLeapYear = this.isLeapYear();
if (!sIsLeapYear) { throw vError = new UnknownException('Date.getDayOfYear');
}
var iDaysInFebruary = (parseInt(sIsLeapYear) == 1) ? 29 : 28;
var aDaysInMonth = new Array(31, iDaysInFebruary, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var iDayOfYear = 0;
for (var i = 0; i < iMonth; i++) {
iDayOfYear += aDaysInMonth[i];
}
iDayOfYear += this.getDate();
var sDayOfYear = iDayOfYear.toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sDayOfYear;
}
}
/**
* Returns the number of days in the month for this date as a two-digit string
* between '28' and '31', inclusive.
*
* @summary days in month
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getDaysInMonth()</code>
* @requires <code>Date.isLeapYear()</code>
* @return the number of days in the month for this date as a
* two-digit string between '28' and '31', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.isLeapYear()</code>
*/
Date.prototype.getDaysInMonth = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('isLeapYear' in this)) { throw vError = new MethodNotAvailableException('Date.getDaysInMonth', 'Date.isLeapYear');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getDaysInMonth', 0, iNumArguments);
}
var iMonth = this.getMonth();
var sIsLeapYear = this.isLeapYear();
if (!sIsLeapYear) { throw vError = new UnknownException('Date.getDaysInMonth');
}
switch (iMonth) { case 1 : var iDaysInMonth = (parseInt(sIsLeapYear) == 1) ? 29 : 28; break; case 3 : case 5 : case 8 : case 10 : var iDaysInMonth = 30; break; default : var iDaysInMonth = 31;
}
var sDaysInMonth = iDaysInMonth.toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sDaysInMonth;
}
}
/**
* Returns the number of days in the year for this date as either 365 or 366.
*
* @summary days in year
* @author Stuart Wigley
* @version 1.0, 12/01/03
* @interface <code>Date.getDaysInYear()</code>
* @requires <code>Date.isLeapYear()</code>
* @return the number of days in the year for this date as either
* 365 or 366
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.isLeapYear()</code>
*/
Date.prototype.getDaysInYear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('isLeapYear' in this)) { throw vError = new MethodNotAvailableException('Date.getDaysInYear', 'Date.isLeapYear');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getDaysInYear', 0, iNumArguments);
}
var sIsLeapYear = this.isLeapYear();
if (!sIsLeapYear) { throw vError = new UnknownException('Date.getDaysInYear');
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sDaysInYear;
}
}
/**
* Calculates the day on which Easter Sunday falls for the current year using
* Butcher's Method. Returns an integer between '1' and '31'
*
* @summary easter day
* @author Stuart Wigley
* @version 1.0, 12/01/03
* @interface <code>Date.getEasterDay()</code>
* @return the day on which Easter Sunday falls
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getEasterDay = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getEasterDate', 0, iNumArguments);
}
var iYear = this.getFullYear();
var a = iYear % 19;
var b = Math.floor(iYear / 100);
var c = iYear % 100;
var d = Math.floor(b / 4);
var e = b % 4;
var f = Math.floor((b + 8) / 25);
var g = Math.floor((b - f + 1) / 3);
var h = (19 * a + b - d - g + 15) % 30;
var i = Math.floor(c / 4);
var k = c % 4;
var l = (32 + 2 * e + 2 * i - h - k) % 7;
var m = Math.floor((a + 11 * h + 22 * l) / 451);
var p = (h + l - 7 * m + 114) % 31;
var iEasterDay = p + 1;
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : iEasterDay;
}
}
/**
* Calculates the month in which Easter Sunday falls for the current year using
* Butcher's Method. Returns '3' for March or '4' for April.
*
* @summary easter month
* @author Stuart Wigley
* @version 1.0, 12/01/03
* @interface <code>Date.getEasterMonth()</code>
* @return the month in which Easter Sunday falls
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getEasterMonth = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getEasterMonth', 0, iNumArguments);
}
var iYear = this.getFullYear();
var a = iYear % 19;
var b = Math.floor(iYear / 100);
var c = iYear % 100;
var d = Math.floor(b / 4);
var e = b % 4;
var f = Math.floor((b + 8) / 25);
var g = Math.floor((b - f + 1) / 3);
var h = (19 * a + b - d - g + 15) % 30;
var i = Math.floor(c / 4);
var k = c % 4;
var l = (32 + 2 * e + 2 * i - h - k) % 7;
var m = Math.floor((a + 11 * h + 22 * l) / 451);
var iEasterMonth = Math.floor((h + l - 7 * m + 114) / 31);
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : iEasterMonth;
}
}
/**
* Returns the formatted Greenwich Mean Time (GMT) offset ('[+/-]HHMM') for
* this date that consists of a plus sign (+) or minus sign (-) followed by
* four digits representing hours (HH) and minutes (MM).
*
* @summary GMT offset
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getGMTOffset()</code>
* @return the formatted Greenwich Mean Time (GMT) offset
* ('[+/-]HHMM') for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getGMTOffset = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getGMTOffset', 0, iNumArguments);
}
var iTimezoneOffset = this.getTimezoneOffset();
var iAbsTimezoneOffset = Math.abs(iTimezoneOffset);
var sTimezoneOffsetSign = (iTimezoneOffset != iAbsTimezoneOffset) ? '-' : '+';
var iTimezoneOffsetHours = iAbsTimezoneOffset / 60;
var sTempTimezoneOffsetHours = iTimezoneOffsetHours.toString();
var sTimezoneOffsetHours = (iTimezoneOffsetHours < 10) ? '0' + sTempTimezoneOffsetHours : sTempTimezoneOffsetHours;
var iTimezoneOffsetMinutes = iAbsTimezoneOffset % 60;
var sTempTimezoneOffsetMinutes = iTimezoneOffsetMinutes.toString();
var sTimezoneOffsetMinutes = (iTimezoneOffsetMinutes < 10) ? '0' + sTempTimezoneOffsetMinutes : sTempTimezoneOffsetMinutes;
var sGMTOffset = sTimezoneOffsetSign + sTimezoneOffsetHours + sTimezoneOffsetMinutes;
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sGMTOffset;
}
}
/**
* Returns the hour for this date as a two-digit string between '01' and '12',
* inclusive.
*
* @summary 12-hour two-digit hour (01-12)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getLong12Hours()</code>
* @return the hour for this date as a two-digit string between
* '01' and '12', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLong12Hours = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLong12Hours', 0, iNumArguments);
}
var iShort12Hours = this.getHours() % 12;
var sLong12Hours = iShort12Hours.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLong12Hours;
}
}
/**
* Returns the hour for this date as a two-digit string between '00' and '23',
* inclusive.
*
* @summary 24-hour two-digit hour (00-23)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getLong24Hours()</code>
* @return the hour for this date as a two-digit string between
* '00' and '23', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLong24Hours = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLong24Hours', 0, iNumArguments);
}
var iShort24Hours = this.getHours();
var sLong24Hours = iShort24Hours.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLong24Hours;
}
}
/**
* Returns the day of the month for this date as a two-digit string between
* '01' and '31', inclusive.
*
* @summary two-digit day of month (01-31)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getLongDate()</code>
* @return the day of the month for this date as a two-digit
* string between '01' and '31', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongDate = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongDate', 0, iNumArguments);
}
var iShortDate = this.getDate();
var sLongDate = iShortDate.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongDate;
}
}
/**
* Returns the day name for this date (e.g. 'Monday', 'Tuesday', etc.).
*
* @summary day name
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getLongDayName()</code>
* @return the day name for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongDayName = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongDayName', 0, iNumArguments);
}
var aLongDayNames = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var sLongDayName = aLongDayNames[this.getDay()];
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongDayName;
}
}
/**
* Returns the minutes for this date as a two-digit string between '00' and
* '59', inclusive.
*
* @summary two-digit minutes (00-59)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getLongMinutes()</code>
* @return the minutes for this date as a two-digit string
* between '00' and '59', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongMinutes = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongMinutes', 0, iNumArguments);
}
var iShortMinutes = this.getMinutes();
var sLongMinutes = iShortMinutes.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongMinutes;
}
}
/**
* Returns the month for this date as a two-digit string between '01' and
* '12', inclusive.
*
* @summary two-digit month (01-12)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getLongMonth()</code>
* @return the month for this date as a two-digit string between
* '01' and '12', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongMonth = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongMonth', 0, iNumArguments);
}
var iShortMonth = this.getMonth() + 1;
var sLongMonth = iShortMonth.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongMonth;
}
}
/**
* Returns the month name for this date (e.g. 'January', 'February', etc.).
*
* @summary month name
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getLongMonthName()</code>
* @return the month name for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongMonthName = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongMonthName', 0, iNumArguments);
}
var aLongMonthNames = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var sLongMonthName = aLongMonthNames[this.getMonth()];
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongMonthName;
}
}
/**
* Returns the seconds for this date as a two-digit string between '00' and
* '59', inclusive.
*
* @summary two-digit seconds (00-59)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getLongSeconds()</code>
* @return the seconds for this date as a two-digit string
* between '00' and '59', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getLongSeconds = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getLongSeconds', 0, iNumArguments);
}
var iShortSeconds = this.getSeconds();
var sLongSeconds = iShortSeconds.toString();
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sLongSeconds;
}
}
/**
* Returns the "meridiem" for this date as either 'am' (Ante Meridiem) or 'pm'
* (Post Meridiem).
*
* @summary meridiem
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getMeridiem()</code>
* @return the "meridiem" for this date as either 'am' or 'pm'
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getMeridiem = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getMeridiem', 0, iNumArguments);
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sMeridiem;
}
}
/**
* Returns the ordinal suffix (in English) of the day of the month for this
* date (i.e. 'st', 'nd', 'rd' or 'th').
*
* @summary English ordinal suffix
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getOrdinalSuffix()</code>
* @return the ordinal suffix (in English) of the day of the
* month for this date (i.e. 'st', 'nd', 'rd' or 'th')
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getOrdinalSuffix = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getOrdinalSuffix', 0, iNumArguments);
}
switch (this.getDate()) { case 1 : case 21 : case 31 : var sOrdinalSuffix = 'st'; break; case 2 : case 22 : var sOrdinalSuffix = 'nd'; break; case 3 : case 23 : var sOrdinalSuffix = 'rd'; break; default : var sOrdinalSuffix = 'th';
}
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sOrdinalSuffix;
}
}
/**
* Returns this date formatted according to the Date and Time Specification of
* RFC 822 (Standard for the Format of ARPA Internet Text Messages).
*
* @summary RFC 822 date
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getRFC822Date()</code>
* @requires <code>Date.getGMTOffset()</code>
* @requires <code>Date.getLong24Hours()</code>
* @requires <code>Date.getLongMinutes()</code>
* @requires <code>Date.getLongSeconds()</code>
* @requires <code>Date.getShortDayName()</code>
* @requires <code>Date.getShortMonthName()</code>
* @return this date formatted according to the Date and Time
* Specification of RFC 822
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.getGMTOffset()</code>
* @see <code>Date.getLong24Hours()</code>
* @see <code>Date.getLongMinutes()</code>
* @see <code>Date.getLongSeconds()</code>
* @see <code>Date.getShortDayName()</code>
* @see <code>Date.getShortMonthName()</code>
*/
Date.prototype.getRFC822Date = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('getGMTOffset' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getGMTOffset');
}
if (!('getLong24Hours' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLong24Hours');
}
if (!('getLongMinutes' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLongMinutes');
}
if (!('getLongSeconds' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLongSeconds');
}
if (!('getShortDayName' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getShortDayName');
}
if (!('getShortMonthName' in this)) { throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getShortMonthName');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getRFC822Date', 0, iNumArguments);
}
var sGMTOffset = this.getGMTOffset();
var sLong24Hours = this.getLong24Hours();
var sLongMinutes = this.getLongMinutes();
var sLongSeconds = this.getLongSeconds();
var sShortDayName = this.getShortDayName();
var sShortMonthName = this.getShortMonthName();
if (!sGMTOffset || !sLong24Hours || !sLongMinutes || !sLongSeconds || !sShortDayName || !sShortMonthName) { throw vError = new UnknownException('Date.getRFC822Date');
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sRFC822Date;
}
}
/**
* Returns the hour for this date as a one- or two-digit string between '1'
* and '12', inclusive.
*
* @summary 12-hour one-/two-digit hour (1-12)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getShort12Hours()</code>
* @return the hour for this date as a one- or two-digit string
* between '1' and '12', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getShort12Hours = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShort12Hours', 0, iNumArguments);
}
var iTempShort12Hours = this.getHours() % 12;
var sShort12Hours = ((iTempShort12Hours == 0) ? 12 : iTempShort12Hours).toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShort12Hours;
}
}
/**
* Returns the hour for this date as a one- or two-digit string between '0'
* and '23', inclusive.
*
* @summary 24-hour one-/two-digit hour (0-23)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getShort24Hours()</code>
* @return the hour for this date as a one- or two-digit string
* between '0' and '23', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getShort24Hours = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShort24Hours', 0, iNumArguments);
}
var sShort24Hours = this.getHours().toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShort24Hours;
}
}
/**
* Returns the shortened day name for this date (e.g. 'Mon', 'Tue', etc.).
*
* @summary short day name
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getShortDayName()</code>
* @requires <code>Date.getLongDayName()</code>
* @return the shortened day name for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.getLongDayName()</code>
*/
Date.prototype.getShortDayName = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('getLongDayName' in this)) { throw vError = new MethodNotAvailableException('Date.getShortDayName', 'Date.getLongDayName');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShortDayName', 0, iNumArguments);
}
var sLongDayName = this.getLongDayName();
if (!sLongDayName) { throw vError = new UnknownException('Date.getShortDayName');
}
var sShortDayName = sLongDayName.substr(0, 3);
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShortDayName;
}
}
/**
* Returns the month for this date as a one- or two-digit string between '1'
* and '12', inclusive.
*
* @summary one-/two-digit month (1-12)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getShortMonth()</code>
* @return the month for this date as a one- or two-digit string
* between '1' and '12', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getShortMonth = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShortMonth', 0, iNumArguments);
}
var sShortMonth = (this.getMonth() + 1).toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShortMonth;
}
}
/**
* Returns the shortened month name for this date (e.g. 'Jan', 'Feb', etc.).
*
* @summary short month name
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/17/03
* @interface <code>Date.getShortMonthName()</code>
* @requires <code>Date.getLongMonthName()</code>
* @return the shortened month name for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @see <code>Date.getLongMonthName()</code>
*/
Date.prototype.getShortMonthName = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('getLongMonthName' in this)) { throw vError = new MethodNotAvailableException('Date.getShortMonthName', 'Date.getLongMonthName');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShortMonthName', 0, iNumArguments);
}
var sLongMonthName = this.getLongMonthName();
if (!sLongMonthName) { throw vError = new UnknownException('Date.getShortMonthName');
}
var sShortMonthName = sLongMonthName.substr(0, 3);
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShortMonthName;
}
}
/**
* Returns the year for this date as a two-digit string between '00' and '99',
* inclusive.
*
* @summary two-digit year (00-99)
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getShortYear()</code>
* @return the year for this date as a two-digit string between
* '00' and '99', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getShortYear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getShortYear', 0, iNumArguments);
}
var sShortYear = this.getFullYear().toString().substr(2);
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sShortYear;
}
}
/**
* Returns the Swatch Internet Time for this date as a three-digit string
* between '000' and '999' prefixed by '@'. See http://www.swatch.com for more
* information.
*
* @summary Swatch Internet Time
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/18/03
* @interface <code>Date.getSwatchTime()</code>
* @return the Swatch Internet Time for this date as a three-
* digit string between '000' and '999' prefixed by '@'
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getSwatchTime = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getSwatchTime', 0, iNumArguments);
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sSwatchTime;
}
}
/**
* Returns the number of seconds elapsed since the UNIX epoch (1 Jan 1970
* 00:00:00 GMT) for this date.
*
* @summary seconds since UNIX epoch
* @author Randolph Fielding
* @version 1.0, 08/20/03
* @interface <code>Date.getTimeSeconds()</code>
* @return the number of seconds elapsed since the UNIX epoch (1
* Jan 1970 00:00:00 GMT) for this date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getTimeSeconds = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getTimeSeconds', 0, iNumArguments);
}
var sTimeSeconds = Math.floor(this.getTime() / 1000).toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sTimeSeconds;
}
}
/**
* Returns the abbreviation of the name of the local timezone.
*
* @summary not implemented
* @author Stuart Wigley
* @version 1.0, 08/07/03
* @interface <code>Date.getTimezone()</code>
* @return the abbreviation of the name of the local timezone
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getTimezone = function() {
return '<< NOT IMPLEMENTED >>';
}
/**
* Returns the Greenwich Mean Time (GMT) offset for this date in seconds.
*
* @summary timezone offset in seconds
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.2, 08/17/03
* @interface <code>Date.getTimezoneOffsetSeconds()</code>
* @return the Greenwich Mean Time (GMT) offset for this date in
* seconds
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getTimezoneOffsetSeconds = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getTimezoneOffsetSeconds', 0, iNumArguments);
}
var sTimezoneOffsetSeconds = (this.getTimezoneOffset() * 60).toString();
} catch (vError) {
if (vError instanceof Error) {
vError.handleError();
}
} finally {
/**
* Returns the ISO week (as specified in the ISO 8601 calendar) for this date
* as a two-digit string between '01' and '53', inclusive. The algorithm used
* is adopted from "Algorithm for Converting Gregorian Dates to ISO 8601 Week
* Date (Y2K Compliant)" by Rick McCarty, 1999. See
* http://personal.ecu.edu/mccartyr/ISOwdALG.txt for more information.
*
* @summary week of year
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/25/03
* @interface <code>Date.getWeekOfYear()</code>
* @requires <code>Date.getDayOfYear()</code>
* @requires <code>Date.isLeapYear()</code>
* @return the ISO week for this date as a one- or two-digit
* string between '1' and '53', inclusive
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
* @throws MethodNotAvailableException
* @throws UnknownException
* @throws <code>Date.getDayOfYear()</code>
* @see <code>Date.isLeapYear()</code>
*/
Date.prototype.getWeekOfYear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (!('getDayOfYear' in this)) { throw vError = new MethodNotAvailableException('Date.getWeekOfYear', 'Date.getDayOfYear');
}
if (!('isLeapYear' in this)) { throw vError = new MethodNotAvailableException('Date.getWeekOfYear', 'Date.isLeapYear');
}
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getWeekOfYear', 0, iNumArguments);
}
var iYear = this.getFullYear();
var iYearM1 = iYear - 1;
var sDayOfYear = this.getDayOfYear();
var sIsLeapYear = this.isLeapYear();
var sIsLeapYearM1 = (new Date('January 1, ' + iYearM1.toString())).isLeapYear();
if (!sDayOfYear || !sIsLeapYear || !sIsLeapYearM1) { throw vError = new UnknownException('Date.getWeekOfYear');
}
var iYearM1Mod100 = iYearM1 % 100;
var iDayOfYear = parseInt(sDayOfYear);
var iJan1DayOfWeek = 1 + ((((Math.floor((iYearM1 - iYearM1Mod100) / 100) % 4) * 5) + (iYearM1Mod100 + Math.floor(iYearM1Mod100 / 4))) % 7);
var iDayOfWeek = 1 + (((iDayOfYear + (iJan1DayOfWeek - 1)) - 1) % 7);
var iDaysInYear = (parseInt(sIsLeapYear) == 1) ? 366 : 365;
var iWeekOfYear = 0;
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sWeekOfYear;
}
}
/**
* Returns Zodiac sign for the current date.
*
* @summary zodiac sign
* @author Stuart Wigley
* @version 1.0, 10/01/03
* @interface <code>Date.getZodiacSign()</code>
* @return the Zodiac sign for the current date
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.getZodiacSign = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.getZodiac', 0, iNumArguments);
}
var iMonth = this.getMonth() + 1;
var iDay = this.getDate();
var sZodiacSign = '';
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sZodiacSign;
}
}
/**
* Determines if this date falls within Daylight Savings Time.
*
* @summary not implemented
* @author Stuart Wigley
* @version 1.0, 08/07/03
* @interface <code>Date.isDaylightSavingsTime()</code>
* @return '1' if this date falls within Daylight Savings Time
* @return '0' if this date does not fall within Daylight Savings
* Time
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.isDaylightSavingsTime = function() {
return '<< NOT IMPLEMENTED >>';
}
/**
* Determines if this date falls within a leap year.
*
* @summary is leap year?
* @author Stuart Wigley
* @author Randolph Fielding
* @version 1.1, 08/08/03
* @interface <code>Date.isLeapYear()</code>
* @return '1' if this date falls within a leap year
* @return '0' if this date does not fall within a leap year
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.isLeapYear = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.isLeapYear', 0, iNumArguments);
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sIsLeapYear;
}
}
/**
* Determines if the current day is a weekday in the range Monday to Friday.
*
* @summary is weekday?
* @author Stuart Wigley
* @version 1.0, 10/01/03
* @interface <code>Date.isWeekday()</code>
* @return '1' if the day is a weekday
* @return '0' if the day is not a weekday
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.isWeekday = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.isWeekday', 0, iNumArguments);
}
if (vError instanceof Error) {
vError.handleError();
}
} finally {
return vError ? null : sIsWeekDay;
}
}
/**
* Determines if the current day is a weekend ie Saturday or Sunday
*
* @summary is weekend?
* @author Stuart Wigley
* @version 1.0, 10/01/03
* @interface <code>Date.isWeekend()</code>
* @return '1' if the day is a weekend
* @return '0' if the day is not a weekend
* @return <code>null</code> if an exception is encountered
* @throws IllegalArgumentException
*/
Date.prototype.isWeekend = function() {
try {
var vError = null;
var iNumArguments = arguments.length;
if (iNumArguments > 0) { throw vError = new IllegalArgumentException('Date.isWeekend', 0, iNumArguments);
}