1
// Date extension ------------------------------------------------------------------------------------------------------
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;
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
17
return new Date(y, m, d, h || 0, min || 0, s || 0, 0);
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);
28
Date.prototype.getUTCFullYearProxy = function (type) {
29
if (type === 'Jalali') {
30
return this.getJalaliFullYear();
32
return this.getUTCFullYear();
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);
43
Date.prototype.getUTCMonthProxy = function (type) {
44
if (type === 'Jalali') {
45
return this.getJalaliMonth();
47
return this.getUTCMonth();
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);
58
Date.prototype.getUTCDateProxy = function (type) {
59
if (type === 'Jalali') {
60
return this.getJalaliDate();
62
return this.getDate();
66
Date.prototype.getJalaliWeek = function() {
67
var j = JalaliDate.jalaliToGregorian(this.getJalaliFullYear(), 1, 1);
69
//First Saturday of the year
70
var d = new Date(j[0], j[1]-1, j[2], 0, 0, 0);
72
//Number of days after the first Saturday of the year
73
var days = this.getJalaliDayOfYear() - ((7 - d.getJalaliDay()) % 7) - 1;
75
if (days < 0) return new Date(this - this.getJalaliDay()*Date.DAY).getJalaliWeek();
76
return Math.floor(days / 7) + 1;
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);
87
Date.prototype.getJalaliDay = function() {
88
var day = this.getDay();
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);
99
j[0] += Math.floor(m / 12);
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]);
107
Date.prototype.setUTCMonthProxy = function (m, type) {
108
if (type === 'Jalali') {
109
this.setJalaliMonth(m);
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;
122
if (m != undefined) {
124
j[0] += Math.floor(m / 12);
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]);
133
Date.prototype.setUTCFullYearProxy = function (y, type) {
134
if (type === 'Jalali') {
135
this.setJalaliFullYear(y);
137
this.setUTCFullYear(y);
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);
147
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
148
return this.setFullYear(g[0], g[1]-1, g[2]);
150
Date.prototype.setUTCDateProxy = function (d, type) {
151
if (type === 'Jalali') {
152
this.setJalaliDate(d);
158
// Date extension END --------------------------------------------------------------------------------------------------
160
// Jalali Date utils ---------------------------------------------------------------------------------------------------
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]
167
JalaliDate.gregorianToJalali = function(g_y, g_m, g_d) {
175
var g_day_no = 365*gy+parseInt((gy+3) / 4)-parseInt((gy+99)/100)+parseInt((gy+399)/400);
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 */
184
var j_day_no = g_day_no-79;
186
var j_np = parseInt(j_day_no/ 12053);
189
var jy = 979+33*j_np+4*parseInt(j_day_no/1461);
193
if (j_day_no >= 366) {
194
jy += parseInt((j_day_no-1)/ 365);
195
j_day_no = (j_day_no-1)%365;
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];
210
JalaliDate.jalaliToGregorian = function(j_y, j_m, j_d) {
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];
225
var g_day_no = j_day_no+79;
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;
231
if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
234
gy += 100*parseInt(g_day_no/ 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
235
g_day_no = g_day_no % 36524;
243
gy += 4*parseInt(g_day_no/ 1461); /* 1461 = 365*4 + 4/4 */
246
if (g_day_no >= 366) {
250
gy += parseInt(g_day_no/ 365);
251
g_day_no = g_day_no % 365;
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);
261
// Jalali Date utils END ----------------------------------------------------------------------------------------------
b'\\ No newline at end of file'