root / trunk / web / dojo / dojox / date / hebrew / Date.js @ 13
History | View | Annotate | Download (8.1 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
4 | see: http://dojotoolkit.org/license for details
|
||
5 | */
|
||
6 | |||
7 | |||
8 | if(!dojo._hasResource["dojox.date.hebrew.Date"]){ |
||
9 | dojo._hasResource["dojox.date.hebrew.Date"]=true; |
||
10 | dojo.provide("dojox.date.hebrew.Date");
|
||
11 | dojo.require("dojox.date.hebrew.numerals");
|
||
12 | dojo.declare("dojox.date.hebrew.Date",null,{_MONTH_LENGTH:[[30,30,30],[29,29,30],[29,30,30],[29,29,29],[30,30,30],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29]],_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[147,148,149],[176,177,178],[206,207,208],[235,236,237],[265,266,267],[294,295,296],[324,325,326],[353,354,355]],_LEAP_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[177,178,179],[206,207,208],[236,237,238],[265,266,267],[295,296,297],[324,325,326],[354,355,356],[383,384,385]],_GREGORIAN_MONTH_COUNT:[[31,31,0,0],[28,29,31,31],[31,31,59,60],[30,30,90,91],[31,31,120,121],[30,30,151,152],[31,31,181,182],[31,31,212,213],[30,30,243,244],[31,31,273,274],[30,30,304,305],[31,31,334,335]],_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,constructor:function(){ |
||
13 | var _1=arguments.length; |
||
14 | if(!_1){
|
||
15 | this.fromGregorian(new Date()); |
||
16 | }else{
|
||
17 | if(_1==1){ |
||
18 | var _2=arguments[0]; |
||
19 | if(typeof _2=="number"){ |
||
20 | _2=new Date(_2);
|
||
21 | } |
||
22 | if(_2 instanceof Date){ |
||
23 | this.fromGregorian(_2);
|
||
24 | }else{
|
||
25 | if(_2==""){ |
||
26 | this._date=new Date(""); |
||
27 | }else{
|
||
28 | this._year=_2._year;
|
||
29 | this._month=_2._month;
|
||
30 | this._date=_2._date;
|
||
31 | this._hours=_2._hours;
|
||
32 | this._minutes=_2._minutes;
|
||
33 | this._seconds=_2._seconds;
|
||
34 | this._milliseconds=_2._milliseconds;
|
||
35 | } |
||
36 | } |
||
37 | }else{
|
||
38 | if(_1>=3){ |
||
39 | this._year+=arguments[0]; |
||
40 | this._month+=arguments[1]; |
||
41 | this._date+=arguments[2]; |
||
42 | if(this._month>12){ |
||
43 | console.warn("the month is incorrect , set 0 "+this._month+" "+this._year); |
||
44 | this._month=0; |
||
45 | } |
||
46 | this._hours+=arguments[3]||0; |
||
47 | this._minutes+=arguments[4]||0; |
||
48 | this._seconds+=arguments[5]||0; |
||
49 | this._milliseconds+=arguments[6]||0; |
||
50 | } |
||
51 | } |
||
52 | } |
||
53 | this._setDay();
|
||
54 | },getDate:function(){ |
||
55 | return this._date; |
||
56 | },getDateLocalized:function(_3){ |
||
57 | return (_3||dojo.locale).match(/^he(?:-.+)?$/)?dojox.date.hebrew.numerals.getDayHebrewLetters(this._date):this.getDate(); |
||
58 | },getMonth:function(){ |
||
59 | return this._month; |
||
60 | },getFullYear:function(){ |
||
61 | return this._year; |
||
62 | },getHours:function(){ |
||
63 | return this._hours; |
||
64 | },getMinutes:function(){ |
||
65 | return this._minutes; |
||
66 | },getSeconds:function(){ |
||
67 | return this._seconds; |
||
68 | },getMilliseconds:function(){ |
||
69 | return this._milliseconds; |
||
70 | },setDate:function(_4){ |
||
71 | _4=+_4; |
||
72 | var _5;
|
||
73 | if(_4>0){ |
||
74 | while(_4>(_5=this.getDaysInHebrewMonth(this._month,this._year))){ |
||
75 | _4-=_5; |
||
76 | this._month++;
|
||
77 | if(this._month>=13){ |
||
78 | this._year++;
|
||
79 | this._month-=13; |
||
80 | } |
||
81 | } |
||
82 | }else{
|
||
83 | while(_4<=0){ |
||
84 | _5=this.getDaysInHebrewMonth((this._month-1)>=0?(this._month-1):12,((this._month-1)>=0)?this._year:this._year-1); |
||
85 | this._month--;
|
||
86 | if(this._month<0){ |
||
87 | this._year--;
|
||
88 | this._month+=13; |
||
89 | } |
||
90 | _4+=_5; |
||
91 | } |
||
92 | } |
||
93 | this._date=_4;
|
||
94 | this._setDay();
|
||
95 | return this; |
||
96 | },setFullYear:function(_6,_7,_8){ |
||
97 | this._year=_6=+_6;
|
||
98 | if(!this.isLeapYear(_6)&&this._month==5){ |
||
99 | this._month++;
|
||
100 | } |
||
101 | if(_7!==undefined){ |
||
102 | this.setMonth(_7);
|
||
103 | } |
||
104 | if(_8!==undefined){ |
||
105 | this.setDate(_8);
|
||
106 | } |
||
107 | var _9=this.getDaysInHebrewMonth(this._month,this._year); |
||
108 | if(_9<this._date){ |
||
109 | this._date=_9;
|
||
110 | } |
||
111 | this._setDay();
|
||
112 | return this; |
||
113 | },setMonth:function(_a){ |
||
114 | _a=+_a; |
||
115 | if(!this.isLeapYear(this._year)&&_a==5){ |
||
116 | _a++; |
||
117 | } |
||
118 | if(_a>=0){ |
||
119 | while(_a>12){ |
||
120 | this._year++;
|
||
121 | _a-=13;
|
||
122 | if(!this.isLeapYear(this._year)&&_a>=5){ |
||
123 | _a++; |
||
124 | } |
||
125 | } |
||
126 | }else{
|
||
127 | while(_a<0){ |
||
128 | this._year--;
|
||
129 | _a+=(!this.isLeapYear(this._year)&&_a<-7)?12:13; |
||
130 | } |
||
131 | } |
||
132 | this._month=_a;
|
||
133 | var _b=this.getDaysInHebrewMonth(this._month,this._year); |
||
134 | if(_b<this._date){ |
||
135 | this._date=_b;
|
||
136 | } |
||
137 | this._setDay();
|
||
138 | return this; |
||
139 | },setHours:function(){ |
||
140 | var _c=arguments.length; |
||
141 | var _d=0; |
||
142 | if(_c>=1){ |
||
143 | _d+=+arguments[0]; |
||
144 | } |
||
145 | if(_c>=2){ |
||
146 | this._minutes+=+arguments[1]; |
||
147 | } |
||
148 | if(_c>=3){ |
||
149 | this._seconds+=+arguments[2]; |
||
150 | } |
||
151 | if(_c==4){ |
||
152 | this._milliseconds+=+arguments[3]; |
||
153 | } |
||
154 | while(_d>=24){ |
||
155 | this._date++;
|
||
156 | var _e=this.getDaysInHebrewMonth(this._month,this._year); |
||
157 | if(this._date>_e){ |
||
158 | this._month++;
|
||
159 | if(!this.isLeapYear(this._year)&&this._month==5){ |
||
160 | this._month++;
|
||
161 | } |
||
162 | if(this._month>=13){ |
||
163 | this._year++;
|
||
164 | this._month-=13; |
||
165 | } |
||
166 | this._date-=_e;
|
||
167 | } |
||
168 | _d-=24;
|
||
169 | } |
||
170 | this._hours=_d;
|
||
171 | this._setDay();
|
||
172 | return this; |
||
173 | },setMinutes:function(_f){ |
||
174 | _f=+_f; |
||
175 | this._minutes=_f%60; |
||
176 | this.setHours(parseInt(_f/60)); |
||
177 | this._setDay();
|
||
178 | return this; |
||
179 | },setSeconds:function(_10){ |
||
180 | _10=+_10; |
||
181 | this._seconds=_10%60; |
||
182 | this.setMinutes(parseInt(_10/60)); |
||
183 | this._setDay();
|
||
184 | return this; |
||
185 | },setMilliseconds:function(_11){ |
||
186 | _11=+_11; |
||
187 | this._milliseconds=_11%1000; |
||
188 | this.setSeconds(parseInt(_11/1000)); |
||
189 | this._setDay();
|
||
190 | return this; |
||
191 | },_setDay:function(){ |
||
192 | var day=this._startOfYear(this._year); |
||
193 | if(this._month!=0){ |
||
194 | day+=(this.isLeapYear(this._year)?this._LEAP_MONTH_START:this._MONTH_START)[this._month][this._yearType(this._year)]; |
||
195 | } |
||
196 | day+=this._date-1; |
||
197 | this._day=(day+1)%7; |
||
198 | },toString:function(){ |
||
199 | return this._date+", "+this._month+", "+this._year+" "+this._hours+":"+this._minutes+":"+this._seconds; |
||
200 | },getDaysInHebrewMonth:function(_12,_13){ |
||
201 | var _14=(_12==1||_12==2)?this._yearType(_13):0; |
||
202 | return (!this.isLeapYear(this._year)&&_12==5)?0:this._MONTH_LENGTH[_12][_14]; |
||
203 | },_yearType:function(_15){ |
||
204 | var _16=this._handleGetYearLength(Number(_15)); |
||
205 | if(_16>380){ |
||
206 | _16-=30;
|
||
207 | } |
||
208 | var _17=_16-353; |
||
209 | if(_17<0||_17>2){ |
||
210 | throw new Error("Illegal year length "+_16+" in year "+_15); |
||
211 | } |
||
212 | return _17;
|
||
213 | },_handleGetYearLength:function(_18){ |
||
214 | return this._startOfYear(_18+1)-this._startOfYear(_18); |
||
215 | },_startOfYear:function(_19){ |
||
216 | var _1a=Math.floor((235*_19-234)/19),_1b=_1a*(12*1080+793)+11*1080+204,day=_1a*29+Math.floor(_1b/(24*1080)); |
||
217 | _1b%=24*1080; |
||
218 | var wd=day%7; |
||
219 | if(wd==2||wd==4||wd==6){ |
||
220 | day+=1;
|
||
221 | wd=day%7;
|
||
222 | } |
||
223 | if(wd==1&&_1b>15*1080+204&&!this.isLeapYear(_19)){ |
||
224 | day+=2;
|
||
225 | }else{
|
||
226 | if(wd==0&&_1b>21*1080+589&&this.isLeapYear(_19-1)){ |
||
227 | day+=1;
|
||
228 | } |
||
229 | } |
||
230 | return day;
|
||
231 | },isLeapYear:function(_1c){ |
||
232 | var x=(_1c*12+17)%19; |
||
233 | return x>=((x<0)?-7:12); |
||
234 | },fromGregorian:function(_1d){ |
||
235 | var _1e=this._computeHebrewFields(_1d); |
||
236 | this._year=_1e[0]; |
||
237 | this._month=_1e[1]; |
||
238 | this._date=_1e[2]; |
||
239 | this._hours=_1d.getHours();
|
||
240 | this._milliseconds=_1d.getMilliseconds();
|
||
241 | this._minutes=_1d.getMinutes();
|
||
242 | this._seconds=_1d.getSeconds();
|
||
243 | this._setDay();
|
||
244 | return this; |
||
245 | },_computeHebrewFields:function(_1f){ |
||
246 | var _20=this._getJulianDayFromGregorianDate(_1f),d=_20-347997,m=Math.floor((d*24*1080)/(29*24*1080+12*1080+793)),_21=Math.floor((19*m+234)/235)+1,ys=this._startOfYear(_21),_22=(d-ys); |
||
247 | while(_22<1){ |
||
248 | _21--; |
||
249 | ys=this._startOfYear(_21);
|
||
250 | _22=d-ys; |
||
251 | } |
||
252 | var _23=this._yearType(_21),_24=this.isLeapYear(_21)?this._LEAP_MONTH_START:this._MONTH_START,_25=0; |
||
253 | while(_22>_24[_25][_23]){
|
||
254 | _25++; |
||
255 | } |
||
256 | _25--; |
||
257 | var _26=_22-_24[_25][_23];
|
||
258 | return [_21,_25,_26];
|
||
259 | },toGregorian:function(){ |
||
260 | var _27=this._year,_28=this._month,_29=this._date,day=this._startOfYear(_27); |
||
261 | if(_28!=0){ |
||
262 | day+=(this.isLeapYear(_27)?this._LEAP_MONTH_START:this._MONTH_START)[_28][this._yearType(_27)]; |
||
263 | } |
||
264 | var _2a=(_29+day+347997),_2b=_2a-1721426; |
||
265 | var rem=[];
|
||
266 | var _2c=this._floorDivide(_2b,146097,rem),_2d=this._floorDivide(rem[0],36524,rem),n4=this._floorDivide(rem[0],1461,rem),n1=this._floorDivide(rem[0],365,rem),_2e=400*_2c+100*_2d+4*n4+n1,_2f=rem[0]; |
||
267 | if(_2d==4||n1==4){ |
||
268 | _2f=365;
|
||
269 | }else{
|
||
270 | ++_2e; |
||
271 | } |
||
272 | var _30=!(_2e%4)&&(_2e%100||!(_2e%400)),_31=0,_32=_30?60:59; |
||
273 | if(_2f>=_32){
|
||
274 | _31=_30?1:2; |
||
275 | } |
||
276 | var _33=Math.floor((12*(_2f+_31)+6)/367); |
||
277 | var _34=_2f-this._GREGORIAN_MONTH_COUNT[_33][_30?3:2]+1; |
||
278 | return new Date(_2e,_33,_34,this._hours,this._minutes,this._seconds,this._milliseconds); |
||
279 | },_floorDivide:function(_35,_36,_37){ |
||
280 | if(_35>=0){ |
||
281 | _37[0]=(_35%_36);
|
||
282 | return Math.floor(_35/_36);
|
||
283 | } |
||
284 | var _38=Math.floor(_35/_36);
|
||
285 | _37[0]=_35-(_38*_36);
|
||
286 | return _38;
|
||
287 | },getDay:function(){ |
||
288 | var _39=this._year,_3a=this._month,_3b=this._date,day=this._startOfYear(_39); |
||
289 | if(_3a!=0){ |
||
290 | day+=(this.isLeapYear(_39)?this._LEAP_MONTH_START:this._MONTH_START)[_3a][this._yearType(_39)]; |
||
291 | } |
||
292 | day+=_3b-1;
|
||
293 | return (day+1)%7; |
||
294 | },_getJulianDayFromGregorianDate:function(_3c){ |
||
295 | var _3d=_3c.getFullYear(),_3e=_3c.getMonth(),d=_3c.getDate(),_3f=!(_3d%4)&&(_3d%100||!(_3d%400)),y=_3d-1; |
||
296 | var _40=365*y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)+1721426-1; |
||
297 | if(_3e!=0){ |
||
298 | _40+=this._GREGORIAN_MONTH_COUNT[_3e][_3f?3:2]; |
||
299 | } |
||
300 | _40+=d; |
||
301 | return _40;
|
||
302 | }}); |
||
303 | dojox.date.hebrew.Date.prototype.valueOf=function(){ |
||
304 | return this.toGregorian().valueOf(); |
||
305 | }; |
||
306 | } |