root / trunk / web / dojo / dojox / date / hebrew / Date.js @ 11
History | View | Annotate | Download (8.1 KB)
| 1 |
/*
|
|---|---|
| 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 |
} |