~xibo-maintainers/xibo/tempel

« back to all changes in this revision

Viewing changes to web/theme/default/libraries/bootstrap-datetimepicker/js/jalali-date.js

  • Committer: Dan Garner
  • Date: 2015-03-26 14:08:33 UTC
  • Revision ID: git-v1:70d14044444f8dc5d602b99890d59dea46d9470c
Moved web servable files to web folder

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Date extension ------------------------------------------------------------------------------------------------------
 
2
 
 
3
/** Constants used for time computations */
 
4
Date.SECOND = 1000 /* milliseconds */;
 
5
Date.MINUTE = 60 * Date.SECOND;
 
6
Date.HOUR   = 60 * Date.MINUTE;
 
7
Date.DAY    = 24 * Date.HOUR;
 
8
Date.WEEK   =  7 * Date.DAY;
 
9
 
 
10
function DateProxy(type, y, m, d, h, min, s) {
 
11
  if (type === 'Jalali') {
 
12
    var jdate = JalaliDate.jalaliToGregorian(y, m, d);
 
13
    //console.log('input for jdate: ' + y + ' ' + m + ' ' + d);
 
14
    //console.log('jdate: ' + jdate);
 
15
    return new Date(jdate[0], jdate[1] - 1, jdate[2], h || 0, min || 0, s || 0, 0); // jalali month is 1-based here
 
16
  } else {
 
17
    return new Date(y, m, d, h || 0, min || 0, s || 0, 0);
 
18
  }
 
19
}
 
20
 
 
21
Date.prototype.getJalaliFullYear = function() {
 
22
        var gd = this.getDate();
 
23
        var gm = this.getMonth();
 
24
        var gy = this.getFullYear();
 
25
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
26
        return j[0];
 
27
};
 
28
Date.prototype.getUTCFullYearProxy = function (type) {
 
29
  if (type === 'Jalali') {
 
30
    return this.getJalaliFullYear();
 
31
  } else {
 
32
    return this.getUTCFullYear();
 
33
  }
 
34
};
 
35
 
 
36
Date.prototype.getJalaliMonth = function() {
 
37
        var gd = this.getDate();
 
38
        var gm = this.getMonth();
 
39
        var gy = this.getFullYear();
 
40
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
41
        return j[1];
 
42
};
 
43
Date.prototype.getUTCMonthProxy = function (type) {
 
44
  if (type === 'Jalali') {
 
45
    return this.getJalaliMonth();
 
46
  } else {
 
47
    return this.getUTCMonth();
 
48
  }
 
49
};
 
50
 
 
51
Date.prototype.getJalaliDate = function() {
 
52
        var gd = this.getDate();
 
53
        var gm = this.getMonth();
 
54
        var gy = this.getFullYear();
 
55
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
56
        return j[2];
 
57
};
 
58
Date.prototype.getUTCDateProxy = function (type) {
 
59
  if (type === 'Jalali') {
 
60
    return this.getJalaliDate();
 
61
  } else {
 
62
    return this.getDate();
 
63
  }
 
64
};
 
65
 
 
66
Date.prototype.getJalaliWeek = function() {
 
67
        var j = JalaliDate.jalaliToGregorian(this.getJalaliFullYear(), 1, 1);
 
68
 
 
69
        //First Saturday of the year
 
70
        var d = new Date(j[0], j[1]-1, j[2], 0, 0, 0);
 
71
 
 
72
        //Number of days after the first Saturday of the year
 
73
        var days = this.getJalaliDayOfYear() - ((7 - d.getJalaliDay()) % 7) - 1;
 
74
 
 
75
        if (days < 0) return new Date(this - this.getJalaliDay()*Date.DAY).getJalaliWeek();
 
76
        return Math.floor(days / 7) + 1;
 
77
};
 
78
 
 
79
Date.prototype.getJalaliDayOfYear = function() {
 
80
        var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
 
81
        var j = JalaliDate.jalaliToGregorian(this.getJalaliFullYear(), 1, 0);
 
82
        var then = new Date(j[0], j[1]-1, j[2], 0, 0, 0);
 
83
        var time = now - then;
 
84
        return Math.floor(time / Date.DAY);
 
85
};
 
86
 
 
87
Date.prototype.getJalaliDay = function() {
 
88
        var day = this.getDay();
 
89
        day = (day + 1) % 7;
 
90
        return day;
 
91
};
 
92
 
 
93
Date.prototype.setJalaliMonth = function(m, d) {
 
94
        var gd = this.getDate();
 
95
        var gm = this.getMonth();
 
96
        var gy = this.getFullYear();
 
97
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
98
        if (m > 12) {
 
99
                j[0] += Math.floor(m / 12);
 
100
                m = m % 12;
 
101
        }
 
102
        j[1] = m;
 
103
        if (d != undefined) j[2] = d;
 
104
        var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
 
105
        return this.setFullYear(g[0], g[1]-1, g[2]);
 
106
};
 
107
Date.prototype.setUTCMonthProxy = function (m, type) {
 
108
  if (type === 'Jalali') {
 
109
    this.setJalaliMonth(m);
 
110
  } else {
 
111
    this.setUTCMonth(m);
 
112
  }
 
113
};
 
114
 
 
115
Date.prototype.setJalaliFullYear = function(y, m, d) {
 
116
        var gd = this.getDate();
 
117
        var gm = this.getMonth();
 
118
        var gy = this.getFullYear();
 
119
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
120
        if (y < 100) y += 1300;
 
121
        j[0] = y;
 
122
        if (m != undefined) {
 
123
                if (m > 11) {
 
124
                        j[0] += Math.floor(m / 12);
 
125
                        m = m % 12;
 
126
                }
 
127
                j[1] = m + 1;
 
128
        }
 
129
        if (d != undefined) j[2] = d;
 
130
        var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
 
131
        return this.setFullYear(g[0], g[1]-1, g[2]);
 
132
};
 
133
Date.prototype.setUTCFullYearProxy = function (y, type) {
 
134
  if (type === 'Jalali') {
 
135
    this.setJalaliFullYear(y);
 
136
  } else {
 
137
    this.setUTCFullYear(y);
 
138
  }
 
139
};
 
140
 
 
141
Date.prototype.setJalaliDate = function(d) {
 
142
        var gd = this.getDate();
 
143
        var gm = this.getMonth();
 
144
        var gy = this.getFullYear();
 
145
        var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
 
146
        j[2] = d;
 
147
        var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
 
148
        return this.setFullYear(g[0], g[1]-1, g[2]);
 
149
};
 
150
Date.prototype.setUTCDateProxy = function (d, type) {
 
151
  if (type === 'Jalali') {
 
152
    this.setJalaliDate(d);
 
153
  } else {
 
154
    this.setDate(d);
 
155
  }
 
156
};
 
157
 
 
158
// Date extension END --------------------------------------------------------------------------------------------------
 
159
 
 
160
// Jalali Date utils ---------------------------------------------------------------------------------------------------
 
161
 
 
162
var JalaliDate = {
 
163
        g_days_in_month: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
 
164
        j_days_in_month: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
 
165
};
 
166
 
 
167
JalaliDate.gregorianToJalali = function(g_y, g_m, g_d) {
 
168
        g_y = parseInt(g_y);
 
169
        g_m = parseInt(g_m);
 
170
        g_d = parseInt(g_d);
 
171
        var gy = g_y-1600;
 
172
        var gm = g_m-1;
 
173
        var gd = g_d-1;
 
174
 
 
175
        var g_day_no = 365*gy+parseInt((gy+3) / 4)-parseInt((gy+99)/100)+parseInt((gy+399)/400);
 
176
 
 
177
        for (var i=0; i < gm; ++i) //{
 
178
                g_day_no += JalaliDate.g_days_in_month[i];
 
179
                if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0))) //{
 
180
                        /* leap and after Feb */
 
181
                        ++g_day_no;
 
182
                        g_day_no += gd;
 
183
 
 
184
                        var j_day_no = g_day_no-79;
 
185
 
 
186
                        var j_np = parseInt(j_day_no/ 12053);
 
187
                        j_day_no %= 12053;
 
188
 
 
189
                        var jy = 979+33*j_np+4*parseInt(j_day_no/1461);
 
190
 
 
191
                        j_day_no %= 1461;
 
192
 
 
193
                        if (j_day_no >= 366) {
 
194
                                jy += parseInt((j_day_no-1)/ 365);
 
195
                                j_day_no = (j_day_no-1)%365;
 
196
                        }
 
197
 
 
198
                        for (var i = 0; i < 11 && j_day_no >= JalaliDate.j_days_in_month[i]; ++i) {
 
199
                                j_day_no -= JalaliDate.j_days_in_month[i];
 
200
                        }
 
201
                        var jm = i+1;
 
202
                        var jd = j_day_no+1;
 
203
 
 
204
 
 
205
                        return [jy, jm, jd];
 
206
                //}
 
207
        //}
 
208
};
 
209
 
 
210
JalaliDate.jalaliToGregorian = function(j_y, j_m, j_d) {
 
211
 
 
212
        j_y = parseInt(j_y);
 
213
        if (j_m > 12) j_y++;
 
214
        j_m = parseInt(j_m);
 
215
        j_d = parseInt(j_d);
 
216
        var jy = j_y-979;
 
217
        var jm = j_m-1;
 
218
        var jd = j_d-1;
 
219
 
 
220
        var j_day_no = 365*jy + parseInt(jy / 33)*8 + parseInt((jy%33+3) / 4);
 
221
        for (var i=0; i < jm; ++i) j_day_no += JalaliDate.j_days_in_month[i];
 
222
 
 
223
        j_day_no += jd;
 
224
 
 
225
        var g_day_no = j_day_no+79;
 
226
 
 
227
        var gy = 1600 + 400 * parseInt(g_day_no / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
 
228
        g_day_no = g_day_no % 146097;
 
229
 
 
230
        var leap = true;
 
231
        if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
 
232
        {
 
233
                g_day_no--;
 
234
                gy += 100*parseInt(g_day_no/  36524); /* 36524 = 365*100 + 100/4 - 100/100 */
 
235
                g_day_no = g_day_no % 36524;
 
236
 
 
237
                if (g_day_no >= 365)
 
238
                        g_day_no++;
 
239
                        else
 
240
                                leap = false;
 
241
                        }
 
242
 
 
243
                        gy += 4*parseInt(g_day_no/ 1461); /* 1461 = 365*4 + 4/4 */
 
244
                        g_day_no %= 1461;
 
245
 
 
246
                        if (g_day_no >= 366) {
 
247
                                leap = false;
 
248
 
 
249
                                g_day_no--;
 
250
                                gy += parseInt(g_day_no/ 365);
 
251
                                g_day_no = g_day_no % 365;
 
252
                        }
 
253
 
 
254
                        for (var i = 0; g_day_no >= JalaliDate.g_days_in_month[i] + (i == 1 && leap); i++)
 
255
                                g_day_no -= JalaliDate.g_days_in_month[i] + (i == 1 && leap);
 
256
                                var gm = i+1;
 
257
                                var gd = g_day_no+1;
 
258
 
 
259
                                return [gy, gm, gd];
 
260
}
 
261
// Jalali Date utils  END ----------------------------------------------------------------------------------------------
 
 
b'\\ No newline at end of file'