+
+
+
+
+
+ 1.3
+ Craig Stewart
+ 2002-08-21
+ Added 4XSLT and libxslt implementation to the list.
+
+
+
+
+ 1.4
+ Craig Stewart
+ 2002-11-12
+ Updated 4XSLT version to 0.12.0a3.
+
+
+
+
+
+
+
+ The date:difference function returns the duration between the first date and the second date. If the first date occurs before the second date, then the result is a positive duration; if it occurs after the second date, the result is a negative duration.
+
+
+ The two dates must both be right-truncated date/time strings in one of the formats defined in [XML Schema Part 2: Datatypes]. The date/time with the most specific format (i.e. the least truncation) is converted into the same format as the date with the most specific format (i.e. the most truncation). The permitted formats are as follows, from most specific to least specific:
+
+ If the date/time string with the least specific format is in either xs:gYearMonth or xs:gYear format, then the number of days, hours, minutes and seconds in the duration string must be equal to zero. (The format of the string will be PnYnM.) The number of months specified in the duration must be less than 12.
+
+
+ Otherwise, the number of years and months in the duration string must be equal to zero. (The format of the string will be PnDTnHnMnS.) The number of seconds specified in the duration string must be less than 60; the number of minutes must be less than 60; the number of hours must be less than 24.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EXSLT
+ date
+ difference
+ Javascript
+
+
+ 1
+
+ Chris Bayes
+ chris@bayes.co.uk
+ http://www.bayes.co.uk
+
+ 2001-06-11
+
+
+
+
+ 2
+
+ Chris Bayes
+ chris@bayes.co.uk
+ http://www.bayes.co.uk
+
+ 2001-06-16
+
+
+
+
+
+
+ EXSLT
+ date
+ difference
+ MSXML
+
+
+ 1
+
+ Chris Bayes
+ chris@bayes.co.uk
+ http://www.bayes.co.uk
+
+ 2001-06-16
+
+
+
+
+
+
+
+
+
Index: projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.msxsl.xsl
===================================================================
--- projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.msxsl.xsl (revision 336)
+++ projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.msxsl.xsl (revision 336)
@@ -0,0 +1,1270 @@
+
+
+
+
+
+ exslt:date-time
+ dates
+ 2.0
+ exslt:javascript
+
+ Chris Bayes
+ Implementation of EXSLT - Dates (http://www.exslt.org/date)
+ _validDuration is not 100%
+ All timezone code.
+
+
+**/
+var gsSuppliedFormat = "";
+var gsLang = "en";
+var gaLang = new Array();
+// en
+gaLang["en"] = new Array();
+gaLang["en"]["months"] = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
+gaLang["en"]["shortMonths"] = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+gaLang["en"]["days"] = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
+gaLang["en"]["shortDays"] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
+
+
+var gaDayNames = new Array();
+gaDayNames["sunday"] = 0;gaDayNames["monday"] = 1;gaDayNames["tuesday"] = 2;gaDayNames["wednesday"] = 3;gaDayNames["thursday"] = 4;gaDayNames["friday"] = 5;gaDayNames["saturday"] = 6;
+var gaMonthCnt = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+var gaMonthCntL = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+function _isLeap(y){return ( ((y%4==0)&(y%100!=0))|(y%400==0) );}
+function _dayOfWeek(y,d){return ( ((y-1)+Math.floor((y-1)/4)-Math.floor((y-1)/100)+Math.floor((y-1)/400)+d)%7);}
+function _dayInYear(y,m,d){return (m==0?d:eval( (_isLeap(y)?gaMonthCntL.slice(0,m).join("+"):gaMonthCnt.slice(0,m).join("+")) )+(d*1) );}
+/**
+
+ add
+ 2.0
+
+
+
+
+
+
+**/
+function add(){//
+ var d1,d2;
+ if (((d1 = _validDate(arguments[0], "xs:dateTime")) ||
+ (d1 = _validDate(arguments[0], "xs:date")) ||
+ (d1 = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (d1 = _validDate(arguments[0], "xs:gYear"))
+ ) &&
+ (d2 = _validDuration(arguments[1])))
+ return _formatDate(d2.addDate(d1), gsSuppliedFormat);
+ return '';
+}
+/**
+
+ addDuration
+ 2.0
+
+
+
+
+
+
+**/
+function addDuration(duration1, duration2){
+ if ((d1 = _validDuration(duration1)) && (d2 = _validDuration(duration2))){
+ var d1mnth = d1.years *12 + d1.months;
+ var d1secs = d1.days*86400 + d1.hours*3600 + d1.minutes*60 + (d1.seconds+'.'+d1.fraction)*1;
+ var d2mnth = d2.years *12 + d2.months;
+ var d2secs = d2.days*86400 + d2.hours*3600 + d2.minutes*60 + (d2.seconds+'.'+d2.fraction)*1;
+ var mnthdiff = (d1.pm+d1mnth)*1 + (d2.pm+d2mnth)*1;
+ var secsdiff = (d1.pm+d1secs)*1 + (d2.pm+d2secs)*1;
+ if ((mnthdiff < 0 && secsdiff > 0) || (mnthdiff > 0 && secsdiff < 0))
+ return '';
+ var secs = secsdiff % 60;
+ var pm = (mnthdiff<0||secsdiff<0?'-':'');
+ mnthdiff = Math.abs(mnthdiff);
+ secsdiff = Math.abs(secsdiff);
+ return _formatDuration(new Duration(pm, 0, mnthdiff, Math.floor(secsdiff/86400), Math.floor((secsdiff%86400)/3600), Math.floor((secsdiff%3600)/60), Math.floor(secs), Math.floor(secs%1)));
+ }
+ return '';
+}
+/**
+
+ date
+ 2.0
+
+
+
+
+
+**/
+function date(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _formatDate(oDate, "xs:date");
+ else
+ return '';
+ }else
+ return _formatDate(new Date(), "xs:date");
+}
+/**
+
+ dateTime
+ 2.0
+
+
+
+**/
+function dateTime(){//must be UTC/Z
+ if (arguments.length > 0)
+ dateTime_invalidArgument.error;
+ var oDate = new Date();
+ return _formatDate(oDate, "xs:dateTime");
+}
+/**
+
+ dayAbbreviation
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayAbbreviation(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayAbbreviation(oDate.getDay(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _dayAbbreviation(new Date().getDay(), arguments[1], arguments[2]);
+}
+function _dayAbbreviation(num, dfName, ctx){
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='days' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='day' and namespace-uri()='http://exslt.org/dates-and-times']/@abbr");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else{ //we could try local
+ return gaLang[gsLang]["shortDays"][num*1];
+ }
+}
+/**
+
+ dayInMonth
+ 2.0
+
+
+
+
+
+**/
+function dayInMonth(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay")) ||
+ (oDate = _validDate(arguments[0], "xs:gDay"))
+ )
+ return oDate.getDate();
+ else
+ return Number.NaN
+ }else
+ return new Date().getDate();
+}
+/**
+
+ dayInWeek
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayInWeek(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayInWeek(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _dayInWeek(new Date(), arguments[1], arguments[2]);
+}
+function _dayInWeek(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ return (oDate.getDay()-fdow<0?oDate.getDay()-fdow+7:oDate.getDay()-fdow)+1;
+}
+/**
+
+ dayInYear
+ 2.0
+
+
+
+
+
+**/
+function dayInYear(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate());
+ else
+ return Number.NaN;
+ }else{
+ var oDate = new Date()
+ return _dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate());
+ }
+}
+/**
+
+ dayName
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayName(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayName(oDate.getDay(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _dayName(new Date().getDay(), arguments[1], arguments[2]);
+}
+function _dayName(num, dfName, ctx){
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='days' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='day' and namespace-uri()='http://exslt.org/dates-and-times']/text()");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else
+ return gaLang[gsLang]["days"][num*1];
+}
+/**
+
+ dayOfWeekInMonth
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayOfWeekInMonth(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayOfWeekInMonth(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _dayOfWeekInMonth(new Date(), arguments[1], arguments[2]);
+}
+function _dayOfWeekInMonth(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ if (fdow > (oDate.getDay()-1))
+ return Math.floor((oDate.getDate())/7)+1;
+ else
+ return Math.floor((oDate.getDate())/7) + 1;
+}
+/**
+
+ difference
+ 2.0
+
+
+
+
+
+
+**/
+function difference(){
+ if (((d1 = _validDate(arguments[0], "xs:dateTime")) ||
+ (d1 = _validDate(arguments[0], "xs:date")) ||
+ (d1 = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (d1 = _validDate(arguments[0], "xs:gYear"))
+ ) &&
+ ((d2 = _validDate(arguments[1], "xs:dateTime")) ||
+ (d2 = _validDate(arguments[1], "xs:date")) ||
+ (d2 = _validDate(arguments[1], "xs:gYearMonth")) ||
+ (d2 = _validDate(arguments[1], "xs:gYear"))
+ )
+ ){// truncation
+ var diffMil = d2.valueOf() - d1.valueOf();
+ return _formatDuration(diffMil);
+ }
+ return Number.NaN;
+}
+/**
+
+ duration
+ 2.0
+
+
+
+
+
+**/
+function duration(){
+ var oDate;
+ if (arguments.length > 0){
+ var nN = new Number(arguments[0]);
+ if (isNaN(nN))
+ return '';
+ else
+ return _formatDuration(arguments[0] * 1000);
+ }else
+ return _formatDuration(seconds() * 1000);
+}
+/**
+
+ formatDate
+ 1.0
+
+
+
+
+
+
+
+
+**/
+function formatDate(date, format, dateF, ctx){
+ var oDate;
+ var re;
+ var retString = "";
+ if ((oDate = _validDate(date, "xs:dateTime")) ||
+ (oDate = _validDate(date, "xs:date")) ||
+ (oDate = _validDate(date, "xs:time")) ||
+ (oDate = _validDate(date, "xs:gYearMonth")) ||
+ (oDate = _validDate(date, "xs:gYear")) ||
+ (oDate = _validDate(date, "xs:gMonthDay")) ||
+ (oDate = _validDate(date, "xs:gMonth")) ||
+ (oDate = _validDate(date, "xs:gDay"))
+ ){
+ for (var i=0; i < format.length;){
+ var s = i;
+ switch(format.substr(i, 1)){
+ case "G":// era designator (Text) AD
+ while (format.substr(i, 1)=="G"){i++;}
+ if (oDate.getFullYear() < 0){
+ retString += "BC";
+ }else{
+ retString += "AD";
+ }
+ break;
+ case "y":// year (Number) 1996
+ while (format.substr(i, 1)=="y"){i++;}
+ if (i-s > 2){
+ retString += oDate.getFullYear();
+ }else{
+ retString += oDate.getFullYear().toString().substring(4-(i-s));
+ }
+ break;
+ case "M":// month in year (Text & Number) July & 07
+ while (format.substr(i, 1)=="M"){i++;}
+ if (i-s <= 2){
+ retString += pad(oDate.getMonth()+1);
+ }else{
+ retString += _monthName(oDate.getMonth(), dateF, ctx);
+ }
+ break;
+ case "d":// day in month (Number) 10
+ while (format.substr(i, 1)=="d"){i++;}
+ retString += pad(oDate.getDate());
+ break;
+ case "h":// hour in am/pm (1~12) (Number) 12
+ while (format.substr(i, 1)=="h"){i++;}
+ if (oDate.getHours() > 12){
+ retString += pad(oDate.getHours()-12);
+ }else{
+ retString += pad(oDate.getHours());
+ }
+ break;
+ case "H":// hour in day (0~23) (Number) 0
+ while (format.substr(i, 1)=="H"){i++;}
+ retString += oDate.getHours();
+ break;
+ case "m":// minute in hour (Number) 30
+ while (format.substr(i, 1)=="m"){i++;}
+ retString += pad(oDate.getMinutes());
+ break;
+ case "s":// second in minute (Number) 55
+ while (format.substr(i, 1)=="s"){i++;}
+ retString += pad(oDate.getSeconds());
+ break;
+ case "S":// millisecond (Number) 978
+ while (format.substr(i, 1)=="S"){i++;}
+ retString += oDate.getMilliseconds();
+ break;
+ case "E":// day in week (Text) Tuesday
+ while (format.substr(i, 1)=="E"){i++;}
+ retString += dayInWeek(oDate, dateF, ctx);
+ break;
+ case "D":// day in year (Number) 189
+ while (format.substr(i, 1)=="D"){i++;}
+ retString += _dayInYear(oDate.getFullYear(), oDate.getMonths(), oDate.getDate());
+ break;
+ case "F":// day of week in month (Number) 2 (2nd Wed in July)
+ while (format.substr(i, 1)=="F"){i++;}
+ retString += dayOfWeekInMonth(oDate, dateF, ctx);
+ break;
+ case "w":// week in year (Number) 27
+ while (format.substr(i, 1)=="w"){i++;}
+ retString += weekInYear(oDate, dateF, ctx);
+ break;
+ case "W":// week in month (Number) 2
+ while (format.substr(i, 1)=="W"){i++;}
+ retString += weekInMonth(oDate, dateF, ctx);
+ break;
+ case "a":// am/pm marker (Text) PM
+ while (format.substr(i, 1)=="a"){i++;}
+ if (oDate.getHours() > 12 ){
+ retString += "PM"
+ }else{
+ retString += "AM"
+ }
+ break;
+ case "k":// hour in day (1~24) (Number) 24
+ while (format.substr(i, 1)=="k"){i++;}
+ retString += oDate.getHours();
+ break;
+ case "K":// hour in am/pm (0~11) (Number) 0
+ while (format.substr(i, 1)=="K"){i++;}
+ if (oDate.getHours() > 12){
+ retString += oDate.getHours()-12;
+ }else{
+ retString += oDate.getHours();
+ }
+ break;
+ case "z":// time zone (Text) Pacific Standard Time
+
+
+
+ while (format.substr(i, 1)=="z"){i++;}
+ var tzo = oDate.getTimezoneOffset();
+ retString += (tzo < 0?"-":"+") + pad(Math.abs(tzo / 60)) + ":" + pad(tzo % 60);
+ break;
+ case "'":// escape for text (Delimiter)
+ if (format.substr(i+1, 1) == "'"){
+ i++;
+ while (format.substr(i, 1)=="'"){i++;}
+ retString += "'";
+ }else{
+ i++;
+ while (format.substr(i, 1)!="'" && i <= format.length){retString += format.substr(i++, 1);}
+ if (i >= format.length)return '';
+ i++;
+ }
+ break;
+ default:
+ retString += format.substr(i, 1);
+ i++;
+ break;
+ }
+ }
+ }
+ return retString;
+}
+/**
+
+ hourInDay
+ 2.0
+
+
+
+
+
+**/
+function hourInDay(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getHours();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getHours();
+}
+/**
+
+ leapYear
+ 2.0
+
+
+
+
+
+**/
+function leapYear(){
+ if (arguments.length > 0 && arguments[0] != ''){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return (_isLeap(oDate.getFullYear())?true:false);
+ else
+ return Number.NaN;
+ }else
+ return (_isLeap(new Date().getFullYear())?true:false);
+}
+/**
+
+ minuteInHour
+ 2.0
+
+
+
+
+
+**/
+function minuteInHour(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getMinutes();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getMinutes();
+}
+/**
+
+ monthAbbreviation
+ 2.0
+
+
+
+
+
+
+
+**/
+function monthAbbreviation(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay"))
+ )
+ return _monthAbbreviation(oDate.getMonth(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _monthAbbreviation(new Date().getMonth(), arguments[1], arguments[2]);
+}
+function _monthAbbreviation(num, dfName, ctx){//
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='months' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='month' and namespace-uri()='http://exslt.org/dates-and-times']/@abbr");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else{ //we could try local
+ return gaLang[gsLang]["shortMonths"][num*1];
+ }
+}
+/**
+
+ monthInYear
+ 2.0
+
+
+
+
+
+**/
+function monthInYear(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.getMonth()+1;
+ else
+ return Number.NaN;
+ }else
+ return new Date().getMonth()+1;
+}
+/**
+
+ monthName
+ 2.0
+
+
+
+
+
+
+
+**/
+function monthName(){//
+ if (arguments.length > 0){// && arguments[0] != ''
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay"))
+ )
+ return _monthName(oDate.getMonth(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _monthName(new Date().getMonth(), arguments[1], arguments[2]);
+}
+function _monthName(num, dfName, ctx){//
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='months' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='month' and namespace-uri()='http://exslt.org/dates-and-times']/text()");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else
+ return gaLang[gsLang]["months"][num*1];
+}
+/**
+
+ parseDate
+ 1.0
+
+
+
+
+
+
+
+
+**/
+function parseDate(date, inFormat, dfName, ctx){//0001
+ var oDate;
+ if (inFormat == ""){
+ if ((oDate = _validDate(date, "xs:dateTime")) ||
+ (oDate = _validDate(date, "xs:date")) ||
+ (oDate = _validDate(date, "xs:time")) ||
+ (oDate = _validDate(date, "xs:gYearMonth")) ||
+ (oDate = _validDate(date, "xs:gYear")) ||
+ (oDate = _validDate(date, "xs:gMonthDay")) ||
+ (oDate = _validDate(date, "xs:gMonth")) ||
+ (oDate = _validDate(date, "xs:gDay"))
+ ){
+ return _formatDate(oDate, "xs:dateTime");
+ }
+ }else{
+ if (oDate = _validDate(date, inFormat))
+ return _formatDate(oDate, dfName);
+ else
+ return '';
+ }
+}
+/**
+
+ secondInMinute
+ 2.0
+
+
+
+
+
+**/
+function secondInMinute(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getSeconds();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getSeconds();
+}
+/**
+
+ seconds
+ 2.0
+
+
+
+
+
+**/
+function seconds(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.valueOf()/1000;
+ else
+ if (oDate = _validDuration(arguments[0]))
+ return oDate.Seconds();
+ else
+ return Number.NaN;
+ }else
+ return Math.floor(new Date().valueOf()/1000);//current local date/time
+}
+/**
+
+ sum
+ 2.0
+
+
+
+
+
+**/
+function sum(ctx){
+ var sDate = "P0S";
+ if (typeof(ctx) == "object"){
+ if (ctx.length){
+ for (var i=0; i < ctx.length; i++){
+ ctxN = ctx.item(i);
+ if (ctxN.nodeType == 1){
+ if (!(sDate = addDuration(sDate, _wander(ctxN))))
+ return '';
+ }
+ if (ctxN.nodeType == 2){
+ if (!(sDate = addDuration(sDate, ctxN.nodeValue)))
+ return '';
+ }
+ }
+ }else{
+ if (!(sDate = addDuration(sDate, ctx.nodeValue)))
+ return '';
+ }
+ }else{
+ return '';
+ }
+ return sDate;
+}
+function _wander(ctx){
+ var sDate = "P0S";
+ for (var i=0; i < ctx.childNodes.length; i++){
+ ctxN = ctx.childNodes[i];
+ switch(ctxN.nodeType){
+ case 1:
+ if (!(sDate = addDuration(sDate, _wander(ctxN))))
+ return '';
+ break;
+ case 3:
+ if (!(sDate = addDuration(sDate, ctxN.nodeValue)))
+ return '';
+ break;
+ default:
+ break;
+ }
+ }
+ return sDate;
+}
+/**
+
+ time
+ 2.0
+
+
+
+
+
+**/
+function time(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime"))||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return _formatDate(oDate, "xs:time");
+ else
+ return '';
+ }else
+ return _formatDate(new Date(), "xs:time");
+}
+/**
+
+ weekInMonth
+ 2.0
+
+
+
+
+
+
+
+**/
+function weekInMonth(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _weekInMonth(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _weekInMonth(new Date(), arguments[1], arguments[2]);
+}
+function _weekInMonth(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ var f = new Date(oDate);
+ f.setDate(1)
+ var fd = f.getDay()-1;
+ var dt = oDate.getDate() + fd - fdow;
+ return Math.floor((dt)/7)+1;
+}
+/**
+
+ weekInYear
+ 2.0
+
+
+
+
+
+
+
+**/
+function weekInYear(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _weekInYear(oDate, arguments[1], arguments[2]);
+ }else
+ return _weekInYear(new Date());
+ return '';
+}
+function _weekInYear(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate()+(7-fdow)) / 7);
+ }else
+ return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate()) / 7);
+}
+/**
+
+ year
+ 2.0
+
+
+
+
+
+**/
+function year(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.getFullYear();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getFullYear();
+}
+/**
+Private functions.
+**/
+function _validDate(date, format){
+ var parts;
+ var oDate = new Date(-62135596800000); // Mon Jan 1 00:00:00 UTC 1
+ switch(format){
+ case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})(T([0-9]{2})(:([0-9]{2})(:([0-9]{2}))?)?)?(Z)?([\+\-][0-9]{2}:[0-9]{2})?$");
+ if (parts=re.exec(date)){
+ if (parts[10] == "Z"){
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ oDate.setHours(parts[5], parts[7], parts[9]);
+ oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());
+ gsSuppliedFormat = "xs:dateTime";
+ return oDate;
+ }else{
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ oDate.setHours(parts[5], parts[7], parts[9]);
+ gsSuppliedFormat = "xs:dateTime";
+ return oDate;
+ }
+ }
+ break;
+ case "xs:date": //(CCYY-MM-DD)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ gsSuppliedFormat = "xs:date";
+ return oDate;
+ }
+ break;
+ case "xs:time": //(hh:mm:ss)
+ var re = new RegExp("^([0-9]{2})(:([0-9]{2})(:([0-9]{2}))?)?(Z)?$");
+ if (parts=re.exec(date)){
+ if (parts[9] == "Z"){
+ oDate.setHours(parts[1], parts[3], parts[5]);
+ oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());
+ gsSuppliedFormat = "xs:time";
+ return oDate;
+ }else{
+ oDate.setHours(parts[1], parts[3], parts[5]);
+ gsSuppliedFormat = "xs:time";
+ return oDate;
+ }
+ }
+ break;
+ case "xs:gYearMonth": //(CCYY-MM)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1], parts[2]-1);
+ gsSuppliedFormat = "xs:gYearMonth";
+ return oDate;
+ }
+ break;
+ case "xs:gYear": //(CCYY)
+ var re = new RegExp("^([0-9]{4})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1]);
+ gsSuppliedFormat = "xs:gYear";
+ return oDate;
+ }
+ break;
+ case "xs:gMonthDay": //(^--MM-DD)
+ var re = new RegExp("--([0-9]{2})-([0-9]{2})");
+ if (parts=re.exec(date)){
+ oDate.setMonth(parts[1]-1, parts[2]);
+ gsSuppliedFormat = "xs:gMonthDay";
+ return oDate;
+ }
+ break;
+ case "xs:gMonth": //(--MM--)
+ var re = new RegExp("^--([0-9]{2})--$");
+ if (parts=re.exec(date)){
+ oDate.setMonth(parts[1]-1);
+ gsSuppliedFormat = "xs:gMonth";
+ return oDate;
+ }
+ break;
+ case "xs:gDay": //(---DD)
+ var re = new RegExp("^---([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setDate(parts[1]);
+ gsSuppliedFormat = "xs:gDay";
+ return oDate;
+ }
+ break;
+ default:
+ // format string
+ var Z = "";
+ for (var i=0,j=0; i < format.length & oDate.toString() != "NaN";){
+ var s = j;
+ switch(format.substr(i, 1)){
+ case "G":// era designator (Text) AD
+ while (format.substr(i, 1)=="G"){i++;j++;}
+ j++;
+ if (date.substr(s,j-s) == "BC" || date.substr(s,j-s) == "bc"){
+ oDate.setFullYear(-oDate.getFullYear);
+ }
+ break;
+ case "y":// year (Number) 1996
+ while (format.substr(i, 1)=="y"){i++;j++;}
+ oDate.setYear(date.substr(s,j-s));
+ break;
+ case "M":// month in year (Text & Number) July & 07
+ while (format.substr(i, 1)=="M"){i++;j++;}
+ if (i-s <= 2){
+ oDate.setMonth(date.substr(s,j-s)-1);
+ }else{
+ oDate.setMonth(_monthNumber(date.substr(s,j-s)));
+ }
+ break;
+ case "d":// day in month (Number) 10
+ while (format.substr(i, 1)=="d"){i++;j++;}
+ oDate.setDate(date.substr(s,j-s));
+ break;
+ case "h":// hour in am/pm (1~12) (Number) 12
+ while (format.substr(i, 1)=="h"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "H":// hour in day (0~23) (Number) 0
+ while (format.substr(i, 1)=="H"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "m":// minute in hour (Number) 30
+ while (format.substr(i, 1)=="m"){i++;j++;}
+ oDate.setMinutes(date.substr(s,j-s));
+ break;
+ case "s":// second in minute (Number) 55
+ while (format.substr(i, 1)=="s"){i++;j++;}
+ oDate.setSeconds(date.substr(s,j-s));
+ break;
+ case "S":// millisecond (Number) 978
+ while (format.substr(i, 1)=="S"){i++;j++;}
+ oDate.setMilliseconds(date.substr(s,j-s));
+ break;
+ case "E":// day in week (Text) Tuesday
+ while (format.substr(i, 1)=="E"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "D":// day in year (Number) 189
+ while (format.substr(i, 1)=="D"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "F":// day of week in month (Number) 2 (2nd Wed in July)
+ while (format.substr(i, 1)=="F"){i++;j++;}
+ break;
+ case "w":// week in year (Number) 27
+ while (format.substr(i, 1)=="w"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "W":// week in month (Number) 2
+ while (format.substr(i, 1)=="W"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "a":// am/pm marker (Text) PM
+ while (format.substr(i, 1)=="a"){i++;j++;}
+ j++;
+ if (date.substr(s,j-s) == "PM" || date.substr(s,j-s) == "pm")
+ oDate.setHours(oDate.getHours()+12);
+ break;
+ case "k":// hour in day (1~24) (Number) 24
+ while (format.substr(i, 1)=="k"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "K":// hour in am/pm (0~11) (Number) 0
+ while (format.substr(i, 1)=="K"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "z":// time zone (Text) Pacific Standard Time
+ while (format.substr(i, 1)=="z"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ //oDate.setMinutes(oDate.getMinutes() - oDate.getTimezoneOffset());
+ Z = date.substr(s,j-s);
+ break;
+ case "'":// escape for text (Delimiter)
+ if (format.substr(i+1, 1) == "'"){
+ i+=2;
+ }else{
+ i++;
+ while (format.substr(i, 1)!="'"){i++;j++;}
+ i++;
+ }
+ break;
+ default:
+ if (format.substr(i, 1) != date.substr(j, 1)){
+ return false;
+ }
+ i++;j++;
+ break;
+ }
+ }
+ if (j < date.length)
+ return false;
+ if (oDate.toString() != "NaN"){
+ if (Z != ""){
+ var re = new RegExp("([\+\-][0-9]{2})?:([0-9]{2})?");
+ if (parts=re.exec(Z)){
+ // check GMT/BST
+ var tzo = parts[1]*60 + parts[2];
+ //if (tzo != new Date().getTimezoneOffset()){
+ // oDate.setMinutes(oDate.getMinutes() - (oDate.getTimezoneOffset() - tzo))
+ //}
+ }
+ }
+ gsSuppliedFormat = "custom";
+ return oDate;
+ }
+ break;
+ }
+ return false;
+}
+function _formatDate(oDate, format){
+ if (oDate == Number.NaN)return Number.NaN;
+ switch(format){
+ case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)
+ var tzo = oDate.getTimezoneOffset();
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + pad(oDate.getDate()) + "T" +
+ pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + ":" + pad(tzo % 60);
+ break;
+ case "xs:date": //(CCYY-MM-DD)
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + pad(oDate.getDate());
+ break;
+ case "xs:time": //(hh:mm:ss)
+ var tzo = oDate.getTimezoneOffset();
+ return pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + ":" + pad(tzo % 60);
+ break;
+ case "xs:gYearMonth": //(CCYY-MM)
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1);
+ break;
+ case "xs:gYear": //(CCYY)
+ return oDate.getFullYear();
+ break;
+ case "xs:gMonthDay": //(--MM-DD)
+ return pad(oDate.getMonth() + 1) + "-" + pad(oDate.getDate());
+ break;
+ case "xs:gMonth": //(--MM--)
+ return pad(oDate.getMonth()+1);
+ break;
+ case "xs:gDay": //(---DD)
+ return pad(oDate.getDate());
+ break;
+ }
+ return false;
+}
+function pad(v){
+ return (v<10?"0"+v:v);
+}
+
+function _validDuration(d){
+ var parts;
+ var re = new RegExp("^([\-])?P(([0-9]+)Y)?(([0-9]+)M)?(([0-9]+)D)?((T)?(([0-9]+)H)?(([0-9]+)M)?((([0-9]+)(\.([0-9]+))?)S)?)?$");
+ if (parts = re.exec(d)){
+ if ((/T$/.exec(d)) || (parts[9] == "T" && parts[11]+parts[13]+parts[16]+parts[18]== ""))// ~(:+(|) duh!!!
+ return Number.NaN;
+ return new Duration(parts[1], parts[3], parts[5], parts[7], parts[11], parts[13], parts[16], parts[18]);
+ }
+ return Number.NaN;
+}
+
+function Duration(pm, years, months, days, hours, minutes, seconds, fraction){
+ this.pm = pm;
+ this.years = years*1;
+ this.months = months*1;
+ this.days = days*1;
+ this.hours = hours*1;
+ this.minutes = minutes*1;
+ this.seconds = seconds*1;
+ this.fraction = fraction*1;
+ this.milliseconds = eval('0.'+fraction) * 100;
+ this.mask = ((this.years?1:0)<<6) + ((this.months?1:0)<<5) + ((this.days?1:0)<<4) + ((this.hours?1:0)<<3) + ((this.minutes?1:0)<<2) + ((this.seconds?1:0)<<1) + (this.milliseconds?1:0);
+ this.addDate = function(d){d.setFullYear(eval(this.pm+this.years)+d.getFullYear(),eval(this.pm+this.months)+d.getMonth(),eval(this.pm+this.days)+d.getDate());d.setHours(eval(this.pm+this.hours)+d.getHours(),eval(this.pm+this.minutes)+d.getMinutes(),eval(this.pm+this.seconds)+d.getSeconds());d.setMilliseconds(eval(this.pm+this.milliseconds));return d;}
+ this.Seconds = function(){if (this.years || this.months)return Number.NaN;return this.days*giDayMill + this.hours*giHourMill + this.minutes*giMinMill + this.seconds*giSecMill;}
+}
+var giYearMill = 31536000000;
+var giMonthMill = 2592000000;
+var giDayMill = 86400000;
+var giHourMill = 3600000;
+var giMinMill = 60000;
+var giSecMill = 1000;
+function _formatDuration(du){
+ if (typeof(du) == "object"){
+ var pm = du.pm;
+ var y = du.years;
+ var m = du.months;
+ var d = du.days;
+ var h = du.hours;
+ var n = du.minutes;
+ var s = du.seconds + du.milliseconds/1000;
+
+ if (y+m+d+h+n+s == 0)
+ return 'P0S';
+ return pm + "P" +
+ (y!=0?y + "Y":'') +
+ (m!=0?m + "M":'') +
+ (d!=0?d + "D":'') +
+ (h+n+s!=0?"T":'') +
+ (h!=0?h + "H":'') +
+ (n!=0?n + "M":'') +
+ (s!=0?s + "S":'');
+ }else{
+ var pm = (du<0?'-':'');
+ du = Math.abs(du);
+ var d = Math.floor((du) / giDayMill);
+ var h = Math.floor((du % giDayMill) / giHourMill);
+ var n = Math.floor((du % giHourMill) / giMinMill);
+ var s = Math.floor((du % giMinMill) / giSecMill) + (du % giSecMill)/1000;
+ return pm + "P" +
+ (d!=0?d + "D":'') +
+ (h+n+s!=0?"T":'') +
+ (h!=0?h + "H":'') +
+ (n!=0?n + "M":'') +
+ (s!=0?s + "S":'');
+ }
+}
+]]>
+
+
+
Index: projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.js
===================================================================
--- projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.js (revision 336)
+++ projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.js (revision 336)
@@ -0,0 +1,1257 @@
+/**
+
+ exslt:date-time
+ dates
+ 2.0
+ exslt:javascript
+
+ Chris Bayes
+ Implementation of EXSLT - Dates (http://www.exslt.org/date)
+ _validDuration is not 100%
+ All timezone code.
+
+
+**/
+var gsSuppliedFormat = "";
+var gsLang = "en";
+var gaLang = new Array();
+// en
+gaLang["en"] = new Array();
+gaLang["en"]["months"] = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
+gaLang["en"]["shortMonths"] = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+gaLang["en"]["days"] = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
+gaLang["en"]["shortDays"] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
+
+
+var gaDayNames = new Array();
+gaDayNames["sunday"] = 0;gaDayNames["monday"] = 1;gaDayNames["tuesday"] = 2;gaDayNames["wednesday"] = 3;gaDayNames["thursday"] = 4;gaDayNames["friday"] = 5;gaDayNames["saturday"] = 6;
+var gaMonthCnt = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+var gaMonthCntL = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+function _isLeap(y){return ( ((y%4==0)&(y%100!=0))|(y%400==0) );}
+function _dayOfWeek(y,d){return ( ((y-1)+Math.floor((y-1)/4)-Math.floor((y-1)/100)+Math.floor((y-1)/400)+d)%7);}
+function _dayInYear(y,m,d){return (m==0?d:eval( (_isLeap(y)?gaMonthCntL.slice(0,m).join("+"):gaMonthCnt.slice(0,m).join("+")) )+(d*1) );}
+/**
+
+ add
+ 2.0
+
+
+
+
+
+
+**/
+function add(){//
+ var d1,d2;
+ if (((d1 = _validDate(arguments[0], "xs:dateTime")) ||
+ (d1 = _validDate(arguments[0], "xs:date")) ||
+ (d1 = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (d1 = _validDate(arguments[0], "xs:gYear"))
+ ) &&
+ (d2 = _validDuration(arguments[1])))
+ return _formatDate(d2.addDate(d1), gsSuppliedFormat);
+ return '';
+}
+/**
+
+ addDuration
+ 2.0
+
+
+
+
+
+
+**/
+function addDuration(duration1, duration2){
+ if ((d1 = _validDuration(duration1)) && (d2 = _validDuration(duration2))){
+ var d1mnth = d1.years *12 + d1.months;
+ var d1secs = d1.days*86400 + d1.hours*3600 + d1.minutes*60 + (d1.seconds+'.'+d1.fraction)*1;
+ var d2mnth = d2.years *12 + d2.months;
+ var d2secs = d2.days*86400 + d2.hours*3600 + d2.minutes*60 + (d2.seconds+'.'+d2.fraction)*1;
+ var mnthdiff = (d1.pm+d1mnth)*1 + (d2.pm+d2mnth)*1;
+ var secsdiff = (d1.pm+d1secs)*1 + (d2.pm+d2secs)*1;
+ if ((mnthdiff < 0 && secsdiff > 0) || (mnthdiff > 0 && secsdiff < 0))
+ return '';
+ var secs = secsdiff % 60;
+ var pm = (mnthdiff<0||secsdiff<0?'-':'');
+ mnthdiff = Math.abs(mnthdiff);
+ secsdiff = Math.abs(secsdiff);
+ return _formatDuration(new Duration(pm, 0, mnthdiff, Math.floor(secsdiff/86400), Math.floor((secsdiff%86400)/3600), Math.floor((secsdiff%3600)/60), Math.floor(secs), Math.floor(secs%1)));
+ }
+ return '';
+}
+/**
+
+ date
+ 2.0
+
+
+
+
+
+**/
+function date(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _formatDate(oDate, "xs:date");
+ else
+ return '';
+ }else
+ return _formatDate(new Date(), "xs:date");
+}
+/**
+
+ dateTime
+ 2.0
+
+
+
+**/
+function dateTime(){//must be UTC/Z
+ if (arguments.length > 0)
+ dateTime_invalidArgument.error;
+ var oDate = new Date();
+ return _formatDate(oDate, "xs:dateTime");
+}
+/**
+
+ dayAbbreviation
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayAbbreviation(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayAbbreviation(oDate.getDay(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _dayAbbreviation(new Date().getDay(), arguments[1], arguments[2]);
+}
+function _dayAbbreviation(num, dfName, ctx){
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='days' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='day' and namespace-uri()='http://exslt.org/dates-and-times']/@abbr");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else{ //we could try local
+ return gaLang[gsLang]["shortDays"][num*1];
+ }
+}
+/**
+
+ dayInMonth
+ 2.0
+
+
+
+
+
+**/
+function dayInMonth(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay")) ||
+ (oDate = _validDate(arguments[0], "xs:gDay"))
+ )
+ return oDate.getDate();
+ else
+ return Number.NaN
+ }else
+ return new Date().getDate();
+}
+/**
+
+ dayInWeek
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayInWeek(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayInWeek(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _dayInWeek(new Date(), arguments[1], arguments[2]);
+}
+function _dayInWeek(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ return (oDate.getDay()-fdow<0?oDate.getDay()-fdow+7:oDate.getDay()-fdow)+1;
+}
+/**
+
+ dayInYear
+ 2.0
+
+
+
+
+
+**/
+function dayInYear(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate());
+ else
+ return Number.NaN;
+ }else{
+ var oDate = new Date()
+ return _dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate());
+ }
+}
+/**
+
+ dayName
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayName(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayName(oDate.getDay(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _dayName(new Date().getDay(), arguments[1], arguments[2]);
+}
+function _dayName(num, dfName, ctx){
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='days' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='day' and namespace-uri()='http://exslt.org/dates-and-times']/text()");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else
+ return gaLang[gsLang]["days"][num*1];
+}
+/**
+
+ dayOfWeekInMonth
+ 2.0
+
+
+
+
+
+
+
+**/
+function dayOfWeekInMonth(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _dayOfWeekInMonth(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _dayOfWeekInMonth(new Date(), arguments[1], arguments[2]);
+}
+function _dayOfWeekInMonth(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ if (fdow > (oDate.getDay()-1))
+ return Math.floor((oDate.getDate())/7)+1;
+ else
+ return Math.floor((oDate.getDate())/7) + 1;
+}
+/**
+
+ difference
+ 2.0
+
+
+
+
+
+
+**/
+function difference(){
+ if (((d1 = _validDate(arguments[0], "xs:dateTime")) ||
+ (d1 = _validDate(arguments[0], "xs:date")) ||
+ (d1 = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (d1 = _validDate(arguments[0], "xs:gYear"))
+ ) &&
+ ((d2 = _validDate(arguments[1], "xs:dateTime")) ||
+ (d2 = _validDate(arguments[1], "xs:date")) ||
+ (d2 = _validDate(arguments[1], "xs:gYearMonth")) ||
+ (d2 = _validDate(arguments[1], "xs:gYear"))
+ )
+ ){// truncation
+ var diffMil = d2.valueOf() - d1.valueOf();
+ return _formatDuration(diffMil);
+ }
+ return Number.NaN;
+}
+/**
+
+ duration
+ 2.0
+
+
+
+
+
+**/
+function duration(){
+ var oDate;
+ if (arguments.length > 0){
+ var nN = new Number(arguments[0]);
+ if (isNaN(nN))
+ return '';
+ else
+ return _formatDuration(arguments[0] * 1000);
+ }else
+ return _formatDuration(seconds() * 1000);
+}
+/**
+
+ formatDate
+ 1.0
+
+
+
+
+
+
+
+
+**/
+function formatDate(date, format, dateF, ctx){
+ var oDate;
+ var re;
+ var retString = "";
+ if ((oDate = _validDate(date, "xs:dateTime")) ||
+ (oDate = _validDate(date, "xs:date")) ||
+ (oDate = _validDate(date, "xs:time")) ||
+ (oDate = _validDate(date, "xs:gYearMonth")) ||
+ (oDate = _validDate(date, "xs:gYear")) ||
+ (oDate = _validDate(date, "xs:gMonthDay")) ||
+ (oDate = _validDate(date, "xs:gMonth")) ||
+ (oDate = _validDate(date, "xs:gDay"))
+ ){
+ for (var i=0; i < format.length;){
+ var s = i;
+ switch(format.substr(i, 1)){
+ case "G":// era designator (Text) AD
+ while (format.substr(i, 1)=="G"){i++;}
+ if (oDate.getFullYear() < 0){
+ retString += "BC";
+ }else{
+ retString += "AD";
+ }
+ break;
+ case "y":// year (Number) 1996
+ while (format.substr(i, 1)=="y"){i++;}
+ if (i-s > 2){
+ retString += oDate.getFullYear();
+ }else{
+ retString += oDate.getFullYear().toString().substring(4-(i-s));
+ }
+ break;
+ case "M":// month in year (Text & Number) July & 07
+ while (format.substr(i, 1)=="M"){i++;}
+ if (i-s <= 2){
+ retString += pad(oDate.getMonth()+1);
+ }else{
+ retString += _monthName(oDate.getMonth(), dateF, ctx);
+ }
+ break;
+ case "d":// day in month (Number) 10
+ while (format.substr(i, 1)=="d"){i++;}
+ retString += pad(oDate.getDate());
+ break;
+ case "h":// hour in am/pm (1~12) (Number) 12
+ while (format.substr(i, 1)=="h"){i++;}
+ if (oDate.getHours() > 12){
+ retString += pad(oDate.getHours()-12);
+ }else{
+ retString += pad(oDate.getHours());
+ }
+ break;
+ case "H":// hour in day (0~23) (Number) 0
+ while (format.substr(i, 1)=="H"){i++;}
+ retString += oDate.getHours();
+ break;
+ case "m":// minute in hour (Number) 30
+ while (format.substr(i, 1)=="m"){i++;}
+ retString += pad(oDate.getMinutes());
+ break;
+ case "s":// second in minute (Number) 55
+ while (format.substr(i, 1)=="s"){i++;}
+ retString += pad(oDate.getSeconds());
+ break;
+ case "S":// millisecond (Number) 978
+ while (format.substr(i, 1)=="S"){i++;}
+ retString += oDate.getMilliseconds();
+ break;
+ case "E":// day in week (Text) Tuesday
+ while (format.substr(i, 1)=="E"){i++;}
+ retString += dayInWeek(oDate, dateF, ctx);
+ break;
+ case "D":// day in year (Number) 189
+ while (format.substr(i, 1)=="D"){i++;}
+ retString += _dayInYear(oDate.getFullYear(), oDate.getMonths(), oDate.getDate());
+ break;
+ case "F":// day of week in month (Number) 2 (2nd Wed in July)
+ while (format.substr(i, 1)=="F"){i++;}
+ retString += dayOfWeekInMonth(oDate, dateF, ctx);
+ break;
+ case "w":// week in year (Number) 27
+ while (format.substr(i, 1)=="w"){i++;}
+ retString += weekInYear(oDate, dateF, ctx);
+ break;
+ case "W":// week in month (Number) 2
+ while (format.substr(i, 1)=="W"){i++;}
+ retString += weekInMonth(oDate, dateF, ctx);
+ break;
+ case "a":// am/pm marker (Text) PM
+ while (format.substr(i, 1)=="a"){i++;}
+ if (oDate.getHours() > 12 ){
+ retString += "PM"
+ }else{
+ retString += "AM"
+ }
+ break;
+ case "k":// hour in day (1~24) (Number) 24
+ while (format.substr(i, 1)=="k"){i++;}
+ retString += oDate.getHours();
+ break;
+ case "K":// hour in am/pm (0~11) (Number) 0
+ while (format.substr(i, 1)=="K"){i++;}
+ if (oDate.getHours() > 12){
+ retString += oDate.getHours()-12;
+ }else{
+ retString += oDate.getHours();
+ }
+ break;
+ case "z":// time zone (Text) Pacific Standard Time
+
+
+
+ while (format.substr(i, 1)=="z"){i++;}
+ var tzo = oDate.getTimezoneOffset();
+ retString += (tzo < 0?"-":"+") + pad(Math.abs(tzo / 60)) + ":" + pad(tzo % 60);
+ break;
+ case "'":// escape for text (Delimiter)
+ if (format.substr(i+1, 1) == "'"){
+ i++;
+ while (format.substr(i, 1)=="'"){i++;}
+ retString += "'";
+ }else{
+ i++;
+ while (format.substr(i, 1)!="'" && i <= format.length){retString += format.substr(i++, 1);}
+ if (i >= format.length)return '';
+ i++;
+ }
+ break;
+ default:
+ retString += format.substr(i, 1);
+ i++;
+ break;
+ }
+ }
+ }
+ return retString;
+}
+/**
+
+ hourInDay
+ 2.0
+
+
+
+
+
+**/
+function hourInDay(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getHours();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getHours();
+}
+/**
+
+ leapYear
+ 2.0
+
+
+
+
+
+**/
+function leapYear(){
+ if (arguments.length > 0 && arguments[0] != ''){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return (_isLeap(oDate.getFullYear())?true:false);
+ else
+ return Number.NaN;
+ }else
+ return (_isLeap(new Date().getFullYear())?true:false);
+}
+/**
+
+ minuteInHour
+ 2.0
+
+
+
+
+
+**/
+function minuteInHour(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getMinutes();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getMinutes();
+}
+/**
+
+ monthAbbreviation
+ 2.0
+
+
+
+
+
+
+
+**/
+function monthAbbreviation(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay"))
+ )
+ return _monthAbbreviation(oDate.getMonth(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _monthAbbreviation(new Date().getMonth(), arguments[1], arguments[2]);
+}
+function _monthAbbreviation(num, dfName, ctx){//
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='months' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='month' and namespace-uri()='http://exslt.org/dates-and-times']/@abbr");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else{ //we could try local
+ return gaLang[gsLang]["shortMonths"][num*1];
+ }
+}
+/**
+
+ monthInYear
+ 2.0
+
+
+
+
+
+**/
+function monthInYear(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.getMonth()+1;
+ else
+ return Number.NaN;
+ }else
+ return new Date().getMonth()+1;
+}
+/**
+
+ monthName
+ 2.0
+
+
+
+
+
+
+
+**/
+function monthName(){//
+ if (arguments.length > 0){// && arguments[0] != ''
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gMonthDay"))
+ )
+ return _monthName(oDate.getMonth(), arguments[1], arguments[2]);
+ else
+ return '';
+ }else
+ return _monthName(new Date().getMonth(), arguments[1], arguments[2]);
+}
+function _monthName(num, dfName, ctx){//
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectNodes(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/*[local-name()='months' and namespace-uri()='http://exslt.org/dates-and-times']" +
+ "/*[local-name()='month' and namespace-uri()='http://exslt.org/dates-and-times']/text()");
+ if (nodes != null)
+ return nodes[num].nodeValue;
+ else
+ return '';
+ }else
+ return gaLang[gsLang]["months"][num*1];
+}
+/**
+
+ parseDate
+ 1.0
+
+
+
+
+
+
+
+
+**/
+function parseDate(date, inFormat, dfName, ctx){//0001
+ var oDate;
+ if (inFormat == ""){
+ if ((oDate = _validDate(date, "xs:dateTime")) ||
+ (oDate = _validDate(date, "xs:date")) ||
+ (oDate = _validDate(date, "xs:time")) ||
+ (oDate = _validDate(date, "xs:gYearMonth")) ||
+ (oDate = _validDate(date, "xs:gYear")) ||
+ (oDate = _validDate(date, "xs:gMonthDay")) ||
+ (oDate = _validDate(date, "xs:gMonth")) ||
+ (oDate = _validDate(date, "xs:gDay"))
+ ){
+ return _formatDate(oDate, "xs:dateTime");
+ }
+ }else{
+ if (oDate = _validDate(date, inFormat))
+ return _formatDate(oDate, dfName);
+ else
+ return '';
+ }
+}
+/**
+
+ secondInMinute
+ 2.0
+
+
+
+
+
+**/
+function secondInMinute(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return oDate.getSeconds();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getSeconds();
+}
+/**
+
+ seconds
+ 2.0
+
+
+
+
+
+**/
+function seconds(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.valueOf()/1000;
+ else
+ if (oDate = _validDuration(arguments[0]))
+ return oDate.Seconds();
+ else
+ return Number.NaN;
+ }else
+ return Math.floor(new Date().valueOf()/1000);//current local date/time
+}
+/**
+
+ sum
+ 2.0
+
+
+
+
+
+**/
+function sum(ctx){
+ var sDate = "P0S";
+ if (typeof(ctx) == "object"){
+ if (ctx.length){
+ for (var i=0; i < ctx.length; i++){
+ ctxN = ctx.item(i);
+ if (ctxN.nodeType == 1){
+ if (!(sDate = addDuration(sDate, _wander(ctxN))))
+ return '';
+ }
+ if (ctxN.nodeType == 2){
+ if (!(sDate = addDuration(sDate, ctxN.nodeValue)))
+ return '';
+ }
+ }
+ }else{
+ if (!(sDate = addDuration(sDate, ctx.nodeValue)))
+ return '';
+ }
+ }else{
+ return '';
+ }
+ return sDate;
+}
+function _wander(ctx){
+ var sDate = "P0S";
+ for (var i=0; i < ctx.childNodes.length; i++){
+ ctxN = ctx.childNodes[i];
+ switch(ctxN.nodeType){
+ case 1:
+ if (!(sDate = addDuration(sDate, _wander(ctxN))))
+ return '';
+ break;
+ case 3:
+ if (!(sDate = addDuration(sDate, ctxN.nodeValue)))
+ return '';
+ break;
+ default:
+ break;
+ }
+ }
+ return sDate;
+}
+/**
+
+ time
+ 2.0
+
+
+
+
+
+**/
+function time(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime"))||
+ (oDate = _validDate(arguments[0], "xs:time"))
+ )
+ return _formatDate(oDate, "xs:time");
+ else
+ return '';
+ }else
+ return _formatDate(new Date(), "xs:time");
+}
+/**
+
+ weekInMonth
+ 2.0
+
+
+
+
+
+
+
+**/
+function weekInMonth(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _weekInMonth(oDate, arguments[1], arguments[2]);
+ else
+ return Number.NaN;
+ }else
+ return _weekInMonth(new Date(), arguments[1], arguments[2]);
+}
+function _weekInMonth(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ }
+ var f = new Date(oDate);
+ f.setDate(1)
+ var fd = f.getDay()-1;
+ var dt = oDate.getDate() + fd - fdow;
+ return Math.floor((dt)/7)+1;
+}
+/**
+
+ weekInYear
+ 2.0
+
+
+
+
+
+
+
+**/
+function weekInYear(){
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date"))
+ )
+ return _weekInYear(oDate, arguments[1], arguments[2]);
+ }else
+ return _weekInYear(new Date());
+ return '';
+}
+function _weekInYear(oDate, dfName, ctx){
+ var fdow = 0;
+ if (ctx != null){
+ var nodes = ctx.nextNode.selectSingleNode(
+ "//*[local-name()='date-format' and namespace-uri()='http://exslt.org/dates-and-times' and @name='" + dfName +"' ]" +
+ "/@first-day-of-week");
+ if (nodes != null)
+ fdow = gaDayNames[nodes.nodeValue];
+ return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate()+(7-fdow)) / 7);
+ }else
+ return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate()) / 7);
+}
+/**
+
+ year
+ 2.0
+
+
+
+
+
+**/
+function year(){//
+ if (arguments.length > 0){
+ var oDate;
+ if ((oDate = _validDate(arguments[0], "xs:dateTime")) ||
+ (oDate = _validDate(arguments[0], "xs:date")) ||
+ (oDate = _validDate(arguments[0], "xs:gYearMonth")) ||
+ (oDate = _validDate(arguments[0], "xs:gYear"))
+ )
+ return oDate.getFullYear();
+ else
+ return Number.NaN;
+ }else
+ return new Date().getFullYear();
+}
+/**
+Private functions.
+**/
+function _validDate(date, format){
+ var parts;
+ var oDate = new Date(-62135596800000); // Mon Jan 1 00:00:00 UTC 1
+ switch(format){
+ case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})(T([0-9]{2})(:([0-9]{2})(:([0-9]{2}))?)?)?(Z)?([\+\-][0-9]{2}:[0-9]{2})?$");
+ if (parts=re.exec(date)){
+ if (parts[10] == "Z"){
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ oDate.setHours(parts[5], parts[7], parts[9]);
+ oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());
+ gsSuppliedFormat = "xs:dateTime";
+ return oDate;
+ }else{
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ oDate.setHours(parts[5], parts[7], parts[9]);
+ gsSuppliedFormat = "xs:dateTime";
+ return oDate;
+ }
+ }
+ break;
+ case "xs:date": //(CCYY-MM-DD)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1], parts[2]-1, parts[3]);
+ gsSuppliedFormat = "xs:date";
+ return oDate;
+ }
+ break;
+ case "xs:time": //(hh:mm:ss)
+ var re = new RegExp("^([0-9]{2})(:([0-9]{2})(:([0-9]{2}))?)?(Z)?$");
+ if (parts=re.exec(date)){
+ if (parts[9] == "Z"){
+ oDate.setHours(parts[1], parts[3], parts[5]);
+ oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());
+ gsSuppliedFormat = "xs:time";
+ return oDate;
+ }else{
+ oDate.setHours(parts[1], parts[3], parts[5]);
+ gsSuppliedFormat = "xs:time";
+ return oDate;
+ }
+ }
+ break;
+ case "xs:gYearMonth": //(CCYY-MM)
+ var re = new RegExp("^([0-9]{4})-([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1], parts[2]-1);
+ gsSuppliedFormat = "xs:gYearMonth";
+ return oDate;
+ }
+ break;
+ case "xs:gYear": //(CCYY)
+ var re = new RegExp("^([0-9]{4})$");
+ if (parts=re.exec(date)){
+ oDate.setFullYear(parts[1]);
+ gsSuppliedFormat = "xs:gYear";
+ return oDate;
+ }
+ break;
+ case "xs:gMonthDay": //(^--MM-DD)
+ var re = new RegExp("--([0-9]{2})-([0-9]{2})");
+ if (parts=re.exec(date)){
+ oDate.setMonth(parts[1]-1, parts[2]);
+ gsSuppliedFormat = "xs:gMonthDay";
+ return oDate;
+ }
+ break;
+ case "xs:gMonth": //(--MM--)
+ var re = new RegExp("^--([0-9]{2})--$");
+ if (parts=re.exec(date)){
+ oDate.setMonth(parts[1]-1);
+ gsSuppliedFormat = "xs:gMonth";
+ return oDate;
+ }
+ break;
+ case "xs:gDay": //(---DD)
+ var re = new RegExp("^---([0-9]{2})$");
+ if (parts=re.exec(date)){
+ oDate.setDate(parts[1]);
+ gsSuppliedFormat = "xs:gDay";
+ return oDate;
+ }
+ break;
+ default:
+ // format string
+ var Z = "";
+ for (var i=0,j=0; i < format.length & oDate.toString() != "NaN";){
+ var s = j;
+ switch(format.substr(i, 1)){
+ case "G":// era designator (Text) AD
+ while (format.substr(i, 1)=="G"){i++;j++;}
+ j++;
+ if (date.substr(s,j-s) == "BC" || date.substr(s,j-s) == "bc"){
+ oDate.setFullYear(-oDate.getFullYear);
+ }
+ break;
+ case "y":// year (Number) 1996
+ while (format.substr(i, 1)=="y"){i++;j++;}
+ oDate.setYear(date.substr(s,j-s));
+ break;
+ case "M":// month in year (Text & Number) July & 07
+ while (format.substr(i, 1)=="M"){i++;j++;}
+ if (i-s <= 2){
+ oDate.setMonth(date.substr(s,j-s)-1);
+ }else{
+ oDate.setMonth(_monthNumber(date.substr(s,j-s)));
+ }
+ break;
+ case "d":// day in month (Number) 10
+ while (format.substr(i, 1)=="d"){i++;j++;}
+ oDate.setDate(date.substr(s,j-s));
+ break;
+ case "h":// hour in am/pm (1~12) (Number) 12
+ while (format.substr(i, 1)=="h"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "H":// hour in day (0~23) (Number) 0
+ while (format.substr(i, 1)=="H"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "m":// minute in hour (Number) 30
+ while (format.substr(i, 1)=="m"){i++;j++;}
+ oDate.setMinutes(date.substr(s,j-s));
+ break;
+ case "s":// second in minute (Number) 55
+ while (format.substr(i, 1)=="s"){i++;j++;}
+ oDate.setSeconds(date.substr(s,j-s));
+ break;
+ case "S":// millisecond (Number) 978
+ while (format.substr(i, 1)=="S"){i++;j++;}
+ oDate.setMilliseconds(date.substr(s,j-s));
+ break;
+ case "E":// day in week (Text) Tuesday
+ while (format.substr(i, 1)=="E"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "D":// day in year (Number) 189
+ while (format.substr(i, 1)=="D"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "F":// day of week in month (Number) 2 (2nd Wed in July)
+ while (format.substr(i, 1)=="F"){i++;j++;}
+ break;
+ case "w":// week in year (Number) 27
+ while (format.substr(i, 1)=="w"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "W":// week in month (Number) 2
+ while (format.substr(i, 1)=="W"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ break;
+ case "a":// am/pm marker (Text) PM
+ while (format.substr(i, 1)=="a"){i++;j++;}
+ j++;
+ if (date.substr(s,j-s) == "PM" || date.substr(s,j-s) == "pm")
+ oDate.setHours(oDate.getHours()+12);
+ break;
+ case "k":// hour in day (1~24) (Number) 24
+ while (format.substr(i, 1)=="k"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "K":// hour in am/pm (0~11) (Number) 0
+ while (format.substr(i, 1)=="K"){i++;j++;}
+ oDate.setHours(date.substr(s,j-s));
+ break;
+ case "z":// time zone (Text) Pacific Standard Time
+ while (format.substr(i, 1)=="z"){i++;j++;}
+ while (format.substr(i+1, 1)!=date.substr(j, 1)){j++;}
+ //oDate.setMinutes(oDate.getMinutes() - oDate.getTimezoneOffset());
+ Z = date.substr(s,j-s);
+ break;
+ case "'":// escape for text (Delimiter)
+ if (format.substr(i+1, 1) == "'"){
+ i+=2;
+ }else{
+ i++;
+ while (format.substr(i, 1)!="'"){i++;j++;}
+ i++;
+ }
+ break;
+ default:
+ if (format.substr(i, 1) != date.substr(j, 1)){
+ return false;
+ }
+ i++;j++;
+ break;
+ }
+ }
+ if (j < date.length)
+ return false;
+ if (oDate.toString() != "NaN"){
+ if (Z != ""){
+ var re = new RegExp("([\+\-][0-9]{2})?:([0-9]{2})?");
+ if (parts=re.exec(Z)){
+ // check GMT/BST
+ var tzo = parts[1]*60 + parts[2];
+ //if (tzo != new Date().getTimezoneOffset()){
+ // oDate.setMinutes(oDate.getMinutes() - (oDate.getTimezoneOffset() - tzo))
+ //}
+ }
+ }
+ gsSuppliedFormat = "custom";
+ return oDate;
+ }
+ break;
+ }
+ return false;
+}
+function _formatDate(oDate, format){
+ if (oDate == Number.NaN)return Number.NaN;
+ switch(format){
+ case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)
+ var tzo = oDate.getTimezoneOffset();
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + pad(oDate.getDate()) + "T" +
+ pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + ":" + pad(tzo % 60);
+ break;
+ case "xs:date": //(CCYY-MM-DD)
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + pad(oDate.getDate());
+ break;
+ case "xs:time": //(hh:mm:ss)
+ var tzo = oDate.getTimezoneOffset();
+ return pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + ":" + pad(tzo % 60);
+ break;
+ case "xs:gYearMonth": //(CCYY-MM)
+ return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1);
+ break;
+ case "xs:gYear": //(CCYY)
+ return oDate.getFullYear();
+ break;
+ case "xs:gMonthDay": //(--MM-DD)
+ return pad(oDate.getMonth() + 1) + "-" + pad(oDate.getDate());
+ break;
+ case "xs:gMonth": //(--MM--)
+ return pad(oDate.getMonth()+1);
+ break;
+ case "xs:gDay": //(---DD)
+ return pad(oDate.getDate());
+ break;
+ }
+ return false;
+}
+function pad(v){
+ return (v<10?"0"+v:v);
+}
+
+function _validDuration(d){
+ var parts;
+ var re = new RegExp("^([\-])?P(([0-9]+)Y)?(([0-9]+)M)?(([0-9]+)D)?((T)?(([0-9]+)H)?(([0-9]+)M)?((([0-9]+)(\.([0-9]+))?)S)?)?$");
+ if (parts = re.exec(d)){
+ if ((/T$/.exec(d)) || (parts[9] == "T" && parts[11]+parts[13]+parts[16]+parts[18]== ""))// ~(:+(|) duh!!!
+ return Number.NaN;
+ return new Duration(parts[1], parts[3], parts[5], parts[7], parts[11], parts[13], parts[16], parts[18]);
+ }
+ return Number.NaN;
+}
+
+function Duration(pm, years, months, days, hours, minutes, seconds, fraction){
+ this.pm = pm;
+ this.years = years*1;
+ this.months = months*1;
+ this.days = days*1;
+ this.hours = hours*1;
+ this.minutes = minutes*1;
+ this.seconds = seconds*1;
+ this.fraction = fraction*1;
+ this.milliseconds = eval('0.'+fraction) * 100;
+ this.mask = ((this.years?1:0)<<6) + ((this.months?1:0)<<5) + ((this.days?1:0)<<4) + ((this.hours?1:0)<<3) + ((this.minutes?1:0)<<2) + ((this.seconds?1:0)<<1) + (this.milliseconds?1:0);
+ this.addDate = function(d){d.setFullYear(eval(this.pm+this.years)+d.getFullYear(),eval(this.pm+this.months)+d.getMonth(),eval(this.pm+this.days)+d.getDate());d.setHours(eval(this.pm+this.hours)+d.getHours(),eval(this.pm+this.minutes)+d.getMinutes(),eval(this.pm+this.seconds)+d.getSeconds());d.setMilliseconds(eval(this.pm+this.milliseconds));return d;}
+ this.Seconds = function(){if (this.years || this.months)return Number.NaN;return this.days*giDayMill + this.hours*giHourMill + this.minutes*giMinMill + this.seconds*giSecMill;}
+}
+var giYearMill = 31536000000;
+var giMonthMill = 2592000000;
+var giDayMill = 86400000;
+var giHourMill = 3600000;
+var giMinMill = 60000;
+var giSecMill = 1000;
+function _formatDuration(du){
+ if (typeof(du) == "object"){
+ var pm = du.pm;
+ var y = du.years;
+ var m = du.months;
+ var d = du.days;
+ var h = du.hours;
+ var n = du.minutes;
+ var s = du.seconds + du.milliseconds/1000;
+
+ if (y+m+d+h+n+s == 0)
+ return 'P0S';
+ return pm + "P" +
+ (y!=0?y + "Y":'') +
+ (m!=0?m + "M":'') +
+ (d!=0?d + "D":'') +
+ (h+n+s!=0?"T":'') +
+ (h!=0?h + "H":'') +
+ (n!=0?n + "M":'') +
+ (s!=0?s + "S":'');
+ }else{
+ var pm = (du<0?'-':'');
+ du = Math.abs(du);
+ var d = Math.floor((du) / giDayMill);
+ var h = Math.floor((du % giDayMill) / giHourMill);
+ var n = Math.floor((du % giHourMill) / giMinMill);
+ var s = Math.floor((du % giMinMill) / giSecMill) + (du % giSecMill)/1000;
+ return pm + "P" +
+ (d!=0?d + "D":'') +
+ (h+n+s!=0?"T":'') +
+ (h!=0?h + "H":'') +
+ (n!=0?n + "M":'') +
+ (s!=0?s + "S":'');
+ }
+}
Index: projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.difference.html
===================================================================
--- projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.difference.html (revision 336)
+++ projects/DailyDrillingReport_1.2/Deliveries/PDFreport/difference/date.difference.html (revision 336)
@@ -0,0 +1,35 @@
+
+
+
+ The date:difference function returns the duration between the first date and the second date. If the first date occurs before the second date, then the result is a positive duration; if it occurs after the second date, the result is a negative duration.
+
+ The two dates must both be right-truncated date/time strings in one of the formats defined in [XML Schema Part 2: Datatypes]. The date/time with the most specific format (i.e. the least truncation) is converted into the same format as the date with the most specific format (i.e. the most truncation). The permitted formats are as follows, from most specific to least specific:
+
+ If the date/time string with the least specific format is in either xs:gYearMonth or xs:gYear format, then the number of days, hours, minutes and seconds in the duration string must be equal to zero. (The format of the string will be PnYnM.) The number of months specified in the duration must be less than 12.
+
+ Otherwise, the number of years and months in the duration string must be equal to zero. (The format of the string will be PnDTnHnMnS.) The number of seconds specified in the duration string must be less than 60; the number of minutes must be less than 60; the number of hours must be less than 24.
+
+ An implementation of this extension
+ function
+ in the EXSLT date namespace must conform to the behaviour described in this document.
+
Implementations
+ Built-in support for date:difference is available in the following XSLT processors:
+
+ The date:difference function returns the duration between the first date and the second date. If the first date occurs before the second date, then the result is a positive duration; if it occurs after the second date, the result is a negative duration.
+
+ The two dates must both be right-truncated date/time strings in one of the formats defined in [XML Schema Part 2: Datatypes]. The date/time with the most specific format (i.e. the least truncation) is converted into the same format as the date with the most specific format (i.e. the most truncation). The permitted formats are as follows, from most specific to least specific:
+
+ If the date/time string with the least specific format is in either xs:gYearMonth or xs:gYear format, then the number of days, hours, minutes and seconds in the duration string must be equal to zero. (The format of the string will be PnYnM.) The number of months specified in the duration must be less than 12.
+
+ Otherwise, the number of years and months in the duration string must be equal to zero. (The format of the string will be PnDTnHnMnS.) The number of seconds specified in the duration string must be less than 60; the number of minutes must be less than 60; the number of hours must be less than 24.
+
Implementations
+ The following XSLT processors support date:difference:
+