root / trunk / web / dojo / dojox / date / hebrew / Date.js @ 10
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 | } |