Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / date / hebrew / Date.js @ 12

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
}