Rev 20 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | /* |
2 | DynAPI Distribution |
||
10534 | obado | 3 | dynapi.functions.Date extension |
20 | reyssat | 4 | */ |
5 | |||
6 | var f = dynapi.functions; |
||
7 | f.Date = {}; // used by dynapi.library |
||
8 | |||
9 | // Date Functions -------------------------------------- |
||
10 | |||
11 | f.dateAdd = function(interval,n,dt){ |
||
10534 | obado | 12 | if(!interval||!n||!dt) return; |
20 | reyssat | 13 | var s=1,m=1,h=1,dd=1,i=interval; |
14 | if(i=='month'||i=='year'){ |
||
15 | dt=new Date(dt); |
||
16 | if(i=='month') dt.setMonth(dt.getMonth()+n); |
||
10534 | obado | 17 | if(i=='year') dt.setFullYear(dt.getFullYear()+n); |
20 | reyssat | 18 | }else if (i=='second'||i=='minute'||i=='hour'||i=='day'){ |
19 | dt=Date.parse(dt); |
||
20 | if(isNaN(dt)) return; |
||
21 | if(i=='second') s=n; |
||
22 | if(i=='minute'){s=60;m=n} |
||
23 | if(i=='hour'){s=60;m=60;h=n}; |
||
24 | if(i=='day'){s=60;m=60;h=24;dd=n}; |
||
25 | dt+=((((1000*s)*m)*h)*dd); |
||
26 | dt=new Date(dt); |
||
27 | } |
||
28 | return dt |
||
29 | }; |
||
30 | f.dateDiff=function(interval,dt1,dt2){ |
||
10534 | obado | 31 | if(!interval||!dt1||!dt2) return; |
32 | var v,s=1,m=1,h=1,dd=1,i=interval; |
||
20 | reyssat | 33 | if(i=='month'||i=='year'){ |
34 | dt1=new Date(dt1); |
||
35 | dt2=new Date(dt2); |
||
36 | years=dt2.getFullYear()-dt1.getFullYear(); |
||
37 | if (i=='year') v=years; |
||
38 | else if(i=='month') { |
||
39 | v=(dt2.getMonth()+1)-(dt1.getMonth()+1); |
||
10534 | obado | 40 | if(years!=0) v+=(years*12); |
20 | reyssat | 41 | } |
42 | }else if (i=='second'||i=='minute'||i=='hour'||i=='day'){ |
||
43 | dt1=Date.parse(dt1); |
||
44 | dt2=Date.parse(dt2); |
||
45 | if(isNaN(dt1)||isNaN(dt2)) return; |
||
46 | v=dt2-dt1; |
||
47 | if(i=='second') s=1000; |
||
48 | if(i=='minute') s=60000; |
||
49 | if(i=='hour'){s=60000;m=60}; |
||
50 | if(i=='day'){s=60000;m=60;h=24;}; |
||
51 | v=((((v/s)/m)/h)/dd); |
||
52 | } |
||
53 | return v; |
||
54 | }; |
||
55 | f.formatDate = function(date,format){ |
||
56 | if(!date) return ''; |
||
57 | var dt=new Date(date); |
||
58 | var mm=dt.getMonth(); |
||
59 | var dd=dt.getDate(); |
||
60 | var day=dt.getDay(); |
||
61 | var yyyy=dt.getFullYear(); |
||
62 | var hh=dt.getHours(); |
||
63 | var nn=dt.getMinutes(); |
||
64 | var ss=dt.getSeconds(); |
||
65 | var ampm |
||
66 | |||
67 | var days=['Sunday','Monday','Teusday','Wednesday','Thursday','Friday','Saturday']; |
||
68 | var months=['January','February','March','April','May','June','July','August','September','October','November','December']; |
||
69 | |||
70 | format=(format)? (format+'').toLowerCase():'dddd, mmmm dd, yyyy hh:nn:ss ampm'; |
||
71 | format=format.replace('mmmm',months[mm]); |
||
72 | format=format.replace('mmm',months[mm].substr(0,3)); |
||
73 | format=format.replace('mm',mm+1); |
||
74 | format=format.replace('dddd',days[day]); |
||
75 | format=format.replace('ddd',days[day].substr(0,3)); |
||
76 | format=format.replace('dd',dd); |
||
77 | format=format.replace('yyyy',yyyy); |
||
78 | if(format.indexOf('ampm')>0){ |
||
79 | if(hh>12) hh=hh-12; |
||
80 | if(hh<12) ampm='AM'; |
||
81 | else ampm='PM'; |
||
82 | format=format.replace('ampm',ampm); |
||
83 | } |
||
84 | format=format.replace('hh',hh); |
||
85 | format=format.replace('nn',nn); |
||
86 | format=format.replace('ss',ss); |
||
87 | |||
88 | return format; |
||
89 | }; |
||
90 | f.isDate = function(dt,format){ |
||
91 | if (!dt) return false; |
||
92 | var dd,mm,yyyy; |
||
93 | var isLeapYear,st=true,delim='/'; |
||
94 | dt+='';format=(format)? format+'':''; |
||
95 | if(dt.indexOf('/')>=0) delim='/'; |
||
96 | else if(dt.indexOf('-')>=0) delim='-'; |
||
97 | else if(dt.indexOf(' ')>=0) delim=' '; |
||
98 | dt=dt.split(delim); |
||
99 | if(format) format=format.replace(/\W/g,'/'); |
||
100 | else { |
||
101 | if (dt[0]>=1000) format='yyyy/mm/dd'; |
||
102 | else if (dt[0]>=12 && dt[1]<=12) format='dd/mm/yyyy'; |
||
103 | else if (dt[0]<=12 && dt[1]>=12) format='mm/dd/yyyy'; |
||
104 | }; |
||
105 | if(format=='yyyy/mm/dd'){yyyy=dt[0];mm=dt[1];dd=dt[2];} |
||
106 | else if(format=='mm/dd/yyyy'){mm=dt[0];dd=dt[1];yyyy=dt[2];} |
||
107 | else if(format=='dd/mm/yyyy'){dd=dt[0];mm=dt[1];yyyy=dt[2];} |
||
108 | if(isNaN(dd)||isNaN(mm)||isNaN(yyyy)) st=false; |
||
109 | else if(dd<1 || dd>31) st=false; |
||
110 | else if(yyyy>9999) st=false; |
||
111 | else if (mm < 1 || mm > 12) st=false; |
||
112 | else if((mm==4 || mm==6 || mm==9 || mm==11) && dd==31) st=false; |
||
113 | else if(mm==2) { // check for leap year and february 29th |
||
114 | isLeapYear = (yyyy % 4 == 0 && (yyyy % 100 != 0 || yyyy % 400 == 0)); |
||
115 | if (dd > 29 || (dd==29 && !isLeapYear)) st=false; |
||
116 | } |
||
117 | return st; |
||
118 | }; |