date-and-time 0.14.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EXTEND.md +29 -11
- package/LOCALE.md +19 -34
- package/PLUGINS.md +222 -113
- package/README.md +203 -171
- package/date-and-time.js +171 -147
- package/date-and-time.min.js +14 -14
- package/esm/date-and-time.es.js +466 -0
- package/esm/date-and-time.es.min.js +17 -0
- package/esm/date-and-time.mjs +466 -0
- package/esm/locale/ar.es.js +39 -0
- package/esm/locale/ar.mjs +39 -0
- package/esm/locale/az.es.js +44 -0
- package/esm/locale/az.mjs +44 -0
- package/esm/locale/bn.es.js +50 -0
- package/esm/locale/bn.mjs +50 -0
- package/esm/locale/cs.es.js +22 -0
- package/esm/locale/cs.mjs +22 -0
- package/esm/locale/de.es.js +23 -0
- package/esm/locale/de.mjs +23 -0
- package/esm/locale/dk.es.js +22 -0
- package/esm/locale/dk.mjs +22 -0
- package/esm/locale/el.es.js +44 -0
- package/esm/locale/el.mjs +44 -0
- package/esm/locale/en.es.js +13 -0
- package/esm/locale/en.mjs +13 -0
- package/esm/locale/es.es.js +42 -0
- package/esm/locale/es.mjs +42 -0
- package/esm/locale/fa.es.js +39 -0
- package/esm/locale/fa.mjs +39 -0
- package/esm/locale/fr.es.js +23 -0
- package/esm/locale/fr.mjs +23 -0
- package/esm/locale/hi.es.js +50 -0
- package/esm/locale/hi.mjs +50 -0
- package/esm/locale/hu.es.js +23 -0
- package/esm/locale/hu.mjs +23 -0
- package/esm/locale/id.es.js +46 -0
- package/esm/locale/id.mjs +46 -0
- package/esm/locale/it.es.js +23 -0
- package/esm/locale/it.mjs +23 -0
- package/esm/locale/ja.es.js +31 -0
- package/esm/locale/ja.mjs +31 -0
- package/esm/locale/jv.es.js +46 -0
- package/esm/locale/jv.mjs +46 -0
- package/esm/locale/ko.es.js +23 -0
- package/esm/locale/ko.mjs +23 -0
- package/esm/locale/my.es.js +38 -0
- package/esm/locale/my.mjs +38 -0
- package/esm/locale/nl.es.js +37 -0
- package/esm/locale/nl.mjs +37 -0
- package/esm/locale/pa-in.es.js +62 -0
- package/esm/locale/pa-in.mjs +62 -0
- package/esm/locale/pl.es.js +37 -0
- package/esm/locale/pl.mjs +37 -0
- package/esm/locale/pt.es.js +44 -0
- package/esm/locale/pt.mjs +44 -0
- package/esm/locale/ro.es.js +22 -0
- package/esm/locale/ro.mjs +22 -0
- package/esm/locale/ru.es.js +44 -0
- package/esm/locale/ru.mjs +44 -0
- package/esm/locale/rw.es.js +22 -0
- package/esm/locale/rw.mjs +22 -0
- package/esm/locale/sr.es.js +22 -0
- package/esm/locale/sr.mjs +22 -0
- package/esm/locale/th.es.js +23 -0
- package/esm/locale/th.mjs +23 -0
- package/esm/locale/tr.es.js +22 -0
- package/esm/locale/tr.mjs +22 -0
- package/esm/locale/uk.es.js +57 -0
- package/esm/locale/uk.mjs +57 -0
- package/esm/locale/uz.es.js +22 -0
- package/esm/locale/uz.mjs +22 -0
- package/esm/locale/vi.es.js +23 -0
- package/esm/locale/vi.mjs +23 -0
- package/esm/locale/zh-cn.es.js +48 -0
- package/esm/locale/zh-cn.mjs +48 -0
- package/esm/locale/zh-tw.es.js +46 -0
- package/esm/locale/zh-tw.mjs +46 -0
- package/esm/plugin/day-of-week.es.js +19 -0
- package/esm/plugin/day-of-week.mjs +19 -0
- package/esm/plugin/meridiem.es.js +47 -0
- package/esm/plugin/meridiem.mjs +47 -0
- package/esm/plugin/microsecond.es.js +31 -0
- package/esm/plugin/microsecond.mjs +31 -0
- package/esm/plugin/ordinal.es.js +34 -0
- package/esm/plugin/ordinal.mjs +34 -0
- package/esm/plugin/timespan.es.js +75 -0
- package/esm/plugin/timespan.mjs +75 -0
- package/esm/plugin/timezone.es.js +73 -0
- package/esm/plugin/timezone.mjs +73 -0
- package/esm/plugin/two-digit-year.es.js +21 -0
- package/esm/plugin/two-digit-year.mjs +21 -0
- package/locale/ar.js +14 -19
- package/locale/az.js +14 -19
- package/locale/bn.js +14 -19
- package/locale/cs.js +14 -19
- package/locale/de.js +15 -20
- package/locale/dk.js +15 -20
- package/locale/el.js +21 -24
- package/locale/en.js +17 -19
- package/locale/es.js +14 -19
- package/locale/fa.js +14 -19
- package/locale/fr.js +14 -19
- package/locale/hi.js +14 -19
- package/locale/hu.js +14 -19
- package/locale/id.js +14 -19
- package/locale/it.js +14 -19
- package/locale/ja.js +14 -19
- package/locale/jv.js +14 -19
- package/locale/ko.js +14 -19
- package/locale/my.js +14 -19
- package/locale/nl.js +20 -23
- package/locale/pa-in.js +14 -19
- package/locale/pl.js +20 -23
- package/locale/pt.js +14 -19
- package/locale/ro.js +15 -20
- package/locale/ru.js +14 -19
- package/locale/rw.js +30 -0
- package/locale/sr.js +14 -19
- package/locale/th.js +14 -19
- package/locale/tr.js +14 -19
- package/locale/uk.js +23 -26
- package/locale/uz.js +14 -19
- package/locale/vi.js +14 -19
- package/locale/zh-cn.js +14 -19
- package/locale/zh-tw.js +14 -19
- package/package.json +26 -11
- package/plugin/day-of-week.js +13 -14
- package/plugin/meridiem.js +32 -24
- package/plugin/microsecond.js +14 -15
- package/plugin/ordinal.js +13 -14
- package/plugin/timespan.js +13 -14
- package/plugin/timezone.js +81 -0
- package/plugin/two-digit-year.js +13 -19
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time (c) KNOWLEDGECODE | MIT
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
var locales = {},
|
|
6
|
+
plugins = {},
|
|
7
|
+
lang = 'en',
|
|
8
|
+
_res = {
|
|
9
|
+
MMMM: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
|
10
|
+
MMM: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
|
11
|
+
dddd: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
12
|
+
ddd: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
13
|
+
dd: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
|
14
|
+
A: ['AM', 'PM']
|
|
15
|
+
},
|
|
16
|
+
_formatter = {
|
|
17
|
+
YYYY: function (d/*, formatString*/) { return ('000' + d.getFullYear()).slice(-4); },
|
|
18
|
+
YY: function (d/*, formatString*/) { return ('0' + d.getFullYear()).slice(-2); },
|
|
19
|
+
Y: function (d/*, formatString*/) { return '' + d.getFullYear(); },
|
|
20
|
+
MMMM: function (d/*, formatString*/) { return this.res.MMMM[d.getMonth()]; },
|
|
21
|
+
MMM: function (d/*, formatString*/) { return this.res.MMM[d.getMonth()]; },
|
|
22
|
+
MM: function (d/*, formatString*/) { return ('0' + (d.getMonth() + 1)).slice(-2); },
|
|
23
|
+
M: function (d/*, formatString*/) { return '' + (d.getMonth() + 1); },
|
|
24
|
+
DD: function (d/*, formatString*/) { return ('0' + d.getDate()).slice(-2); },
|
|
25
|
+
D: function (d/*, formatString*/) { return '' + d.getDate(); },
|
|
26
|
+
HH: function (d/*, formatString*/) { return ('0' + d.getHours()).slice(-2); },
|
|
27
|
+
H: function (d/*, formatString*/) { return '' + d.getHours(); },
|
|
28
|
+
A: function (d/*, formatString*/) { return this.res.A[d.getHours() > 11 | 0]; },
|
|
29
|
+
hh: function (d/*, formatString*/) { return ('0' + (d.getHours() % 12 || 12)).slice(-2); },
|
|
30
|
+
h: function (d/*, formatString*/) { return '' + (d.getHours() % 12 || 12); },
|
|
31
|
+
mm: function (d/*, formatString*/) { return ('0' + d.getMinutes()).slice(-2); },
|
|
32
|
+
m: function (d/*, formatString*/) { return '' + d.getMinutes(); },
|
|
33
|
+
ss: function (d/*, formatString*/) { return ('0' + d.getSeconds()).slice(-2); },
|
|
34
|
+
s: function (d/*, formatString*/) { return '' + d.getSeconds(); },
|
|
35
|
+
SSS: function (d/*, formatString*/) { return ('00' + d.getMilliseconds()).slice(-3); },
|
|
36
|
+
SS: function (d/*, formatString*/) { return ('0' + (d.getMilliseconds() / 10 | 0)).slice(-2); },
|
|
37
|
+
S: function (d/*, formatString*/) { return '' + (d.getMilliseconds() / 100 | 0); },
|
|
38
|
+
dddd: function (d/*, formatString*/) { return this.res.dddd[d.getDay()]; },
|
|
39
|
+
ddd: function (d/*, formatString*/) { return this.res.ddd[d.getDay()]; },
|
|
40
|
+
dd: function (d/*, formatString*/) { return this.res.dd[d.getDay()]; },
|
|
41
|
+
Z: function (d/*, formatString*/) {
|
|
42
|
+
var offset = d.getTimezoneOffset() / 0.6 | 0;
|
|
43
|
+
return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - (offset % 100 * 0.4 | 0))).slice(-4);
|
|
44
|
+
},
|
|
45
|
+
post: function (str) { return str; },
|
|
46
|
+
res: _res
|
|
47
|
+
},
|
|
48
|
+
_parser = {
|
|
49
|
+
YYYY: function (str/*, formatString */) { return this.exec(/^\d{4}/, str); },
|
|
50
|
+
Y: function (str/*, formatString */) { return this.exec(/^\d{1,4}/, str); },
|
|
51
|
+
MMMM: function (str/*, formatString */) {
|
|
52
|
+
var result = this.find(this.res.MMMM, str);
|
|
53
|
+
result.value++;
|
|
54
|
+
return result;
|
|
55
|
+
},
|
|
56
|
+
MMM: function (str/*, formatString */) {
|
|
57
|
+
var result = this.find(this.res.MMM, str);
|
|
58
|
+
result.value++;
|
|
59
|
+
return result;
|
|
60
|
+
},
|
|
61
|
+
MM: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
62
|
+
M: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
63
|
+
DD: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
64
|
+
D: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
65
|
+
HH: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
66
|
+
H: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
67
|
+
A: function (str/*, formatString */) { return this.find(this.res.A, str); },
|
|
68
|
+
hh: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
69
|
+
h: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
70
|
+
mm: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
71
|
+
m: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
72
|
+
ss: function (str/*, formatString */) { return this.exec(/^\d\d/, str); },
|
|
73
|
+
s: function (str/*, formatString */) { return this.exec(/^\d\d?/, str); },
|
|
74
|
+
SSS: function (str/*, formatString */) { return this.exec(/^\d{1,3}/, str); },
|
|
75
|
+
SS: function (str/*, formatString */) {
|
|
76
|
+
var result = this.exec(/^\d\d?/, str);
|
|
77
|
+
result.value *= 10;
|
|
78
|
+
return result;
|
|
79
|
+
},
|
|
80
|
+
S: function (str/*, formatString */) {
|
|
81
|
+
var result = this.exec(/^\d/, str);
|
|
82
|
+
result.value *= 100;
|
|
83
|
+
return result;
|
|
84
|
+
},
|
|
85
|
+
Z: function (str/*, formatString */) {
|
|
86
|
+
var result = this.exec(/^[\+-]\d{2}[0-5]\d/, str);
|
|
87
|
+
result.value = (result.value / 100 | 0) * -60 - result.value % 100;
|
|
88
|
+
return result;
|
|
89
|
+
},
|
|
90
|
+
h12: function (h, a) { return (h === 12 ? 0 : h) + a * 12; },
|
|
91
|
+
exec: function (re, str) {
|
|
92
|
+
var result = (re.exec(str) || [''])[0];
|
|
93
|
+
return { value: result | 0, length: result.length };
|
|
94
|
+
},
|
|
95
|
+
find: function (array, str) {
|
|
96
|
+
var index = -1, length = 0;
|
|
97
|
+
|
|
98
|
+
for (var i = 0, len = array.length, item; i < len; i++) {
|
|
99
|
+
item = array[i];
|
|
100
|
+
if (!str.indexOf(item) && item.length > length) {
|
|
101
|
+
index = i;
|
|
102
|
+
length = item.length;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { value: index, length: length };
|
|
106
|
+
},
|
|
107
|
+
pre: function (str) { return str; },
|
|
108
|
+
res: _res
|
|
109
|
+
},
|
|
110
|
+
extend = function (base, props, override, res) {
|
|
111
|
+
var obj = {}, key;
|
|
112
|
+
|
|
113
|
+
for (key in base) {
|
|
114
|
+
obj[key] = base[key];
|
|
115
|
+
}
|
|
116
|
+
for (key in props || {}) {
|
|
117
|
+
if (!(!!override ^ !!obj[key])) {
|
|
118
|
+
obj[key] = props[key];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (res) {
|
|
122
|
+
obj.res = res;
|
|
123
|
+
}
|
|
124
|
+
return obj;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
var proto = {
|
|
128
|
+
_formatter: _formatter,
|
|
129
|
+
_parser: _parser
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Compiling a format string
|
|
134
|
+
* @param {string} formatString - a format string
|
|
135
|
+
* @returns {Array.<string>} a compiled object
|
|
136
|
+
*/
|
|
137
|
+
proto.compile = function (formatString) {
|
|
138
|
+
var re = /\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g, keys, pattern = [formatString];
|
|
139
|
+
|
|
140
|
+
while ((keys = re.exec(formatString))) {
|
|
141
|
+
pattern[pattern.length] = keys[0];
|
|
142
|
+
}
|
|
143
|
+
return pattern;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Formatting a Date and Time
|
|
148
|
+
* @param {Date} dateObj - a Date object
|
|
149
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
150
|
+
* @param {boolean} [utc] - output as UTC
|
|
151
|
+
* @returns {string} a formatted string
|
|
152
|
+
*/
|
|
153
|
+
proto.format = function (dateObj, arg, utc) {
|
|
154
|
+
var pattern = typeof arg === 'string' ? this.compile(arg) : arg,
|
|
155
|
+
offset = dateObj.getTimezoneOffset(),
|
|
156
|
+
d = this.addMinutes(dateObj, utc ? offset : 0),
|
|
157
|
+
formatter = this._formatter, str = '';
|
|
158
|
+
|
|
159
|
+
d.getTimezoneOffset = function () { return utc ? 0 : offset; };
|
|
160
|
+
for (var i = 1, len = pattern.length, token; i < len; i++) {
|
|
161
|
+
token = pattern[i];
|
|
162
|
+
str += formatter[token] ? formatter.post(formatter[token](d, pattern[0])) : token.replace(/\[(.*)]/, '$1');
|
|
163
|
+
}
|
|
164
|
+
return str;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Pre-parsing a Date and Time string
|
|
169
|
+
* @param {string} dateString - a date string
|
|
170
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
171
|
+
* @returns {Object} a date structure
|
|
172
|
+
*/
|
|
173
|
+
proto.preparse = function (dateString, arg) {
|
|
174
|
+
var pattern = typeof arg === 'string' ? this.compile(arg) : arg,
|
|
175
|
+
dt = { Y: 1970, M: 1, D: 1, H: 0, A: 0, h: 0, m: 0, s: 0, S: 0, Z: 0, _index: 0, _length: 0, _match: 0 },
|
|
176
|
+
comment = /\[(.*)]/, parser = this._parser, offset = 0;
|
|
177
|
+
|
|
178
|
+
dateString = parser.pre(dateString);
|
|
179
|
+
for (var i = 1, len = pattern.length, token, result; i < len; i++) {
|
|
180
|
+
token = pattern[i];
|
|
181
|
+
if (parser[token]) {
|
|
182
|
+
result = parser[token](dateString.slice(offset), pattern[0]);
|
|
183
|
+
if (!result.length) {
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
offset += result.length;
|
|
187
|
+
dt[result.token || token.charAt(0)] = result.value;
|
|
188
|
+
dt._match++;
|
|
189
|
+
} else if (token === dateString.charAt(offset) || token === ' ') {
|
|
190
|
+
offset++;
|
|
191
|
+
} else if (comment.test(token) && !dateString.slice(offset).indexOf(comment.exec(token)[1])) {
|
|
192
|
+
offset += token.length - 2;
|
|
193
|
+
} else if (token === '...') {
|
|
194
|
+
offset = dateString.length;
|
|
195
|
+
break;
|
|
196
|
+
} else {
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
dt.H = dt.H || parser.h12(dt.h, dt.A);
|
|
201
|
+
dt._index = offset;
|
|
202
|
+
dt._length = dateString.length;
|
|
203
|
+
return dt;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Parsing a Date and Time string
|
|
208
|
+
* @param {string} dateString - a date string
|
|
209
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
210
|
+
* @param {boolean} [utc] - input as UTC
|
|
211
|
+
* @returns {Date} a constructed date
|
|
212
|
+
*/
|
|
213
|
+
proto.parse = function (dateString, arg, utc) {
|
|
214
|
+
var dt = this.preparse(dateString, arg);
|
|
215
|
+
|
|
216
|
+
if (this.isValid(dt)) {
|
|
217
|
+
dt.M -= dt.Y < 100 ? 22801 : 1; // 22801 = 1900 * 12 + 1
|
|
218
|
+
if (utc || dt.Z) {
|
|
219
|
+
return new Date(Date.UTC(dt.Y, dt.M, dt.D, dt.H, dt.m + dt.Z, dt.s, dt.S));
|
|
220
|
+
}
|
|
221
|
+
return new Date(dt.Y, dt.M, dt.D, dt.H, dt.m, dt.s, dt.S);
|
|
222
|
+
}
|
|
223
|
+
return new Date(NaN);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Validation
|
|
228
|
+
* @param {Object|string} arg1 - a date structure or a date string
|
|
229
|
+
* @param {string|Array.<string>} [arg2] - a format string or its compiled object
|
|
230
|
+
* @returns {boolean} whether the date string is a valid date
|
|
231
|
+
*/
|
|
232
|
+
proto.isValid = function (arg1, arg2) {
|
|
233
|
+
var dt = typeof arg1 === 'string' ? this.preparse(arg1, arg2) : arg1,
|
|
234
|
+
last = [31, 28 + this.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
|
|
235
|
+
|
|
236
|
+
return !(
|
|
237
|
+
dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
|
|
238
|
+
dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
|
|
239
|
+
dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
|
|
240
|
+
dt.Z < -720 || dt.Z > 840
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Transforming a Date and Time string
|
|
246
|
+
* @param {string} dateString - a date string
|
|
247
|
+
* @param {string|Array.<string>} arg1 - a format string or its compiled object
|
|
248
|
+
* @param {string|Array.<string>} arg2 - a transformed format string or its compiled object
|
|
249
|
+
* @param {boolean} [utc] - output as UTC
|
|
250
|
+
* @returns {string} a formatted string
|
|
251
|
+
*/
|
|
252
|
+
proto.transform = function (dateString, arg1, arg2, utc) {
|
|
253
|
+
return this.format(this.parse(dateString, arg1), arg2, utc);
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Adding years
|
|
258
|
+
* @param {Date} dateObj - a date object
|
|
259
|
+
* @param {number} years - number of years to add
|
|
260
|
+
* @returns {Date} a date after adding the value
|
|
261
|
+
*/
|
|
262
|
+
proto.addYears = function (dateObj, years) {
|
|
263
|
+
return this.addMonths(dateObj, years * 12);
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Adding months
|
|
268
|
+
* @param {Date} dateObj - a date object
|
|
269
|
+
* @param {number} months - number of months to add
|
|
270
|
+
* @returns {Date} a date after adding the value
|
|
271
|
+
*/
|
|
272
|
+
proto.addMonths = function (dateObj, months) {
|
|
273
|
+
var d = new Date(dateObj.getTime());
|
|
274
|
+
|
|
275
|
+
d.setMonth(d.getMonth() + months);
|
|
276
|
+
return d;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Adding days
|
|
281
|
+
* @param {Date} dateObj - a date object
|
|
282
|
+
* @param {number} days - number of days to add
|
|
283
|
+
* @returns {Date} a date after adding the value
|
|
284
|
+
*/
|
|
285
|
+
proto.addDays = function (dateObj, days) {
|
|
286
|
+
var d = new Date(dateObj.getTime());
|
|
287
|
+
|
|
288
|
+
d.setDate(d.getDate() + days);
|
|
289
|
+
return d;
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Adding hours
|
|
294
|
+
* @param {Date} dateObj - a date object
|
|
295
|
+
* @param {number} hours - number of hours to add
|
|
296
|
+
* @returns {Date} a date after adding the value
|
|
297
|
+
*/
|
|
298
|
+
proto.addHours = function (dateObj, hours) {
|
|
299
|
+
return this.addMinutes(dateObj, hours * 60);
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Adding minutes
|
|
304
|
+
* @param {Date} dateObj - a date object
|
|
305
|
+
* @param {number} minutes - number of minutes to add
|
|
306
|
+
* @returns {Date} a date after adding the value
|
|
307
|
+
*/
|
|
308
|
+
proto.addMinutes = function (dateObj, minutes) {
|
|
309
|
+
return this.addSeconds(dateObj, minutes * 60);
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Adding seconds
|
|
314
|
+
* @param {Date} dateObj - a date object
|
|
315
|
+
* @param {number} seconds - number of seconds to add
|
|
316
|
+
* @returns {Date} a date after adding the value
|
|
317
|
+
*/
|
|
318
|
+
proto.addSeconds = function (dateObj, seconds) {
|
|
319
|
+
return this.addMilliseconds(dateObj, seconds * 1000);
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Adding milliseconds
|
|
324
|
+
* @param {Date} dateObj - a date object
|
|
325
|
+
* @param {number} milliseconds - number of milliseconds to add
|
|
326
|
+
* @returns {Date} a date after adding the value
|
|
327
|
+
*/
|
|
328
|
+
proto.addMilliseconds = function (dateObj, milliseconds) {
|
|
329
|
+
return new Date(dateObj.getTime() + milliseconds);
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Subtracting two dates
|
|
334
|
+
* @param {Date} date1 - a Date object
|
|
335
|
+
* @param {Date} date2 - a Date object
|
|
336
|
+
* @returns {Object} a result object subtracting date2 from date1
|
|
337
|
+
*/
|
|
338
|
+
proto.subtract = function (date1, date2) {
|
|
339
|
+
var delta = date1.getTime() - date2.getTime();
|
|
340
|
+
|
|
341
|
+
return {
|
|
342
|
+
toMilliseconds: function () {
|
|
343
|
+
return delta;
|
|
344
|
+
},
|
|
345
|
+
toSeconds: function () {
|
|
346
|
+
return delta / 1000;
|
|
347
|
+
},
|
|
348
|
+
toMinutes: function () {
|
|
349
|
+
return delta / 60000;
|
|
350
|
+
},
|
|
351
|
+
toHours: function () {
|
|
352
|
+
return delta / 3600000;
|
|
353
|
+
},
|
|
354
|
+
toDays: function () {
|
|
355
|
+
return delta / 86400000;
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Whether year is leap year
|
|
362
|
+
* @param {number} y - year
|
|
363
|
+
* @returns {boolean} whether year is leap year
|
|
364
|
+
*/
|
|
365
|
+
proto.isLeapYear = function (y) {
|
|
366
|
+
return (!(y % 4) && !!(y % 100)) || !(y % 400);
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Comparison of two dates
|
|
371
|
+
* @param {Date} date1 - a Date object
|
|
372
|
+
* @param {Date} date2 - a Date object
|
|
373
|
+
* @returns {boolean} whether the two dates are the same day (time is ignored)
|
|
374
|
+
*/
|
|
375
|
+
proto.isSameDay = function (date1, date2) {
|
|
376
|
+
return date1.toDateString() === date2.toDateString();
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Defining new locale
|
|
381
|
+
* @param {string} code - language code
|
|
382
|
+
* @param {Function} locale - locale installer
|
|
383
|
+
* @returns {string} current language code
|
|
384
|
+
*/
|
|
385
|
+
proto.locale = function (code, locale) {
|
|
386
|
+
if (!locales[code]) {
|
|
387
|
+
locales[code] = locale;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Defining new plugin
|
|
393
|
+
* @param {string} name - plugin name
|
|
394
|
+
* @param {Function} plugin - plugin installer
|
|
395
|
+
* @returns {void}
|
|
396
|
+
*/
|
|
397
|
+
proto.plugin = function (name, plugin) {
|
|
398
|
+
if (!plugins[name]) {
|
|
399
|
+
plugins[name] = plugin;
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
var localized_proto = extend(proto);
|
|
404
|
+
var date = extend(proto);
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Changing locale
|
|
408
|
+
* @param {Function|string} [locale] - locale object | language code
|
|
409
|
+
* @returns {string} current language code
|
|
410
|
+
*/
|
|
411
|
+
date.locale = function (locale) {
|
|
412
|
+
var install = typeof locale === 'function' ? locale : date.locale[locale];
|
|
413
|
+
|
|
414
|
+
if (!install) {
|
|
415
|
+
return lang;
|
|
416
|
+
}
|
|
417
|
+
lang = install(proto);
|
|
418
|
+
|
|
419
|
+
var extension = locales[lang] || {};
|
|
420
|
+
var res = extend(_res, extension.res, true);
|
|
421
|
+
var formatter = extend(_formatter, extension.formatter, true, res);
|
|
422
|
+
var parser = extend(_parser, extension.parser, true, res);
|
|
423
|
+
|
|
424
|
+
date._formatter = localized_proto._formatter = formatter;
|
|
425
|
+
date._parser = localized_proto._parser = parser;
|
|
426
|
+
|
|
427
|
+
for (var plugin in plugins) {
|
|
428
|
+
date.extend(plugins[plugin]);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return lang;
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Feature extension
|
|
436
|
+
* @param {Object} extension - extension object
|
|
437
|
+
* @returns {void}
|
|
438
|
+
*/
|
|
439
|
+
date.extend = function (extension) {
|
|
440
|
+
var res = extend(date._parser.res, extension.res);
|
|
441
|
+
var extender = extension.extender || {};
|
|
442
|
+
|
|
443
|
+
date._formatter = extend(date._formatter, extension.formatter, false, res);
|
|
444
|
+
date._parser = extend(date._parser, extension.parser, false, res);
|
|
445
|
+
|
|
446
|
+
for (var key in extender) {
|
|
447
|
+
if (!date[key]) {
|
|
448
|
+
date[key] = extender[key];
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Importing plugin
|
|
455
|
+
* @param {Function|string} plugin - plugin object | plugin name
|
|
456
|
+
* @returns {void}
|
|
457
|
+
*/
|
|
458
|
+
date.plugin = function (plugin) {
|
|
459
|
+
var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
|
|
460
|
+
|
|
461
|
+
if (install) {
|
|
462
|
+
date.extend(plugins[install(proto, localized_proto)] || {});
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
export { date as default };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time.js locale configuration
|
|
3
|
+
* @preserve Arabic (ar)
|
|
4
|
+
* @preserve It is using moment.js locale configuration as a reference.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var ar = function (date) {
|
|
8
|
+
var code = 'ar';
|
|
9
|
+
|
|
10
|
+
date.locale(code, {
|
|
11
|
+
res: {
|
|
12
|
+
MMMM: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
|
13
|
+
MMM: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
|
14
|
+
dddd: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
|
|
15
|
+
ddd: ['أحد', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
|
|
16
|
+
dd: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
|
|
17
|
+
A: ['ص', 'م']
|
|
18
|
+
},
|
|
19
|
+
formatter: {
|
|
20
|
+
post: function (str) {
|
|
21
|
+
var num = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
|
|
22
|
+
return str.replace(/\d/g, function (i) {
|
|
23
|
+
return num[i | 0];
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
parser: {
|
|
28
|
+
pre: function (str) {
|
|
29
|
+
var map = { '٠': 0, '١': 1, '٢': 2, '٣': 3, '٤': 4, '٥': 5, '٦': 6, '٧': 7, '٨': 8, '٩': 9 };
|
|
30
|
+
return str.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (i) {
|
|
31
|
+
return '' + map[i];
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return code;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { ar as default };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time.js locale configuration
|
|
3
|
+
* @preserve Arabic (ar)
|
|
4
|
+
* @preserve It is using moment.js locale configuration as a reference.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var ar = function (date) {
|
|
8
|
+
var code = 'ar';
|
|
9
|
+
|
|
10
|
+
date.locale(code, {
|
|
11
|
+
res: {
|
|
12
|
+
MMMM: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
|
13
|
+
MMM: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
|
14
|
+
dddd: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
|
|
15
|
+
ddd: ['أحد', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
|
|
16
|
+
dd: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
|
|
17
|
+
A: ['ص', 'م']
|
|
18
|
+
},
|
|
19
|
+
formatter: {
|
|
20
|
+
post: function (str) {
|
|
21
|
+
var num = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
|
|
22
|
+
return str.replace(/\d/g, function (i) {
|
|
23
|
+
return num[i | 0];
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
parser: {
|
|
28
|
+
pre: function (str) {
|
|
29
|
+
var map = { '٠': 0, '١': 1, '٢': 2, '٣': 3, '٤': 4, '٥': 5, '٦': 6, '٧': 7, '٨': 8, '٩': 9 };
|
|
30
|
+
return str.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (i) {
|
|
31
|
+
return '' + map[i];
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return code;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { ar as default };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time.js locale configuration
|
|
3
|
+
* @preserve Azerbaijani (az)
|
|
4
|
+
* @preserve It is using moment.js locale configuration as a reference.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var az = function (date) {
|
|
8
|
+
var code = 'az';
|
|
9
|
+
|
|
10
|
+
date.locale(code, {
|
|
11
|
+
res: {
|
|
12
|
+
MMMM: ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],
|
|
13
|
+
MMM: ['yan', 'fev', 'mar', 'apr', 'may', 'iyn', 'iyl', 'avq', 'sen', 'okt', 'noy', 'dek'],
|
|
14
|
+
dddd: ['Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə'],
|
|
15
|
+
ddd: ['Baz', 'BzE', 'ÇAx', 'Çər', 'CAx', 'Cüm', 'Şən'],
|
|
16
|
+
dd: ['Bz', 'BE', 'ÇA', 'Çə', 'CA', 'Cü', 'Şə'],
|
|
17
|
+
A: ['gecə', 'səhər', 'gündüz', 'axşam']
|
|
18
|
+
},
|
|
19
|
+
formatter: {
|
|
20
|
+
A: function (d) {
|
|
21
|
+
var h = d.getHours();
|
|
22
|
+
if (h < 4) {
|
|
23
|
+
return this.res.A[0]; // gecə
|
|
24
|
+
} else if (h < 12) {
|
|
25
|
+
return this.res.A[1]; // səhər
|
|
26
|
+
} else if (h < 17) {
|
|
27
|
+
return this.res.A[2]; // gündüz
|
|
28
|
+
}
|
|
29
|
+
return this.res.A[3]; // axşam
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
parser: {
|
|
33
|
+
h12: function (h, a) {
|
|
34
|
+
if (a < 2) {
|
|
35
|
+
return h; // gecə, səhər
|
|
36
|
+
}
|
|
37
|
+
return h > 11 ? h : h + 12; // gündüz, axşam
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return code;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { az as default };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time.js locale configuration
|
|
3
|
+
* @preserve Azerbaijani (az)
|
|
4
|
+
* @preserve It is using moment.js locale configuration as a reference.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var az = function (date) {
|
|
8
|
+
var code = 'az';
|
|
9
|
+
|
|
10
|
+
date.locale(code, {
|
|
11
|
+
res: {
|
|
12
|
+
MMMM: ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],
|
|
13
|
+
MMM: ['yan', 'fev', 'mar', 'apr', 'may', 'iyn', 'iyl', 'avq', 'sen', 'okt', 'noy', 'dek'],
|
|
14
|
+
dddd: ['Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə'],
|
|
15
|
+
ddd: ['Baz', 'BzE', 'ÇAx', 'Çər', 'CAx', 'Cüm', 'Şən'],
|
|
16
|
+
dd: ['Bz', 'BE', 'ÇA', 'Çə', 'CA', 'Cü', 'Şə'],
|
|
17
|
+
A: ['gecə', 'səhər', 'gündüz', 'axşam']
|
|
18
|
+
},
|
|
19
|
+
formatter: {
|
|
20
|
+
A: function (d) {
|
|
21
|
+
var h = d.getHours();
|
|
22
|
+
if (h < 4) {
|
|
23
|
+
return this.res.A[0]; // gecə
|
|
24
|
+
} else if (h < 12) {
|
|
25
|
+
return this.res.A[1]; // səhər
|
|
26
|
+
} else if (h < 17) {
|
|
27
|
+
return this.res.A[2]; // gündüz
|
|
28
|
+
}
|
|
29
|
+
return this.res.A[3]; // axşam
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
parser: {
|
|
33
|
+
h12: function (h, a) {
|
|
34
|
+
if (a < 2) {
|
|
35
|
+
return h; // gecə, səhər
|
|
36
|
+
}
|
|
37
|
+
return h > 11 ? h : h + 12; // gündüz, axşam
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return code;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { az as default };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @preserve date-and-time.js locale configuration
|
|
3
|
+
* @preserve Bengali (bn)
|
|
4
|
+
* @preserve It is using moment.js locale configuration as a reference.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var bn = function (date) {
|
|
8
|
+
var code = 'bn';
|
|
9
|
+
|
|
10
|
+
date.locale(code, {
|
|
11
|
+
res: {
|
|
12
|
+
MMMM: ['জানুয়ারী', 'ফেবুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'অগাস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],
|
|
13
|
+
MMM: ['জানু', 'ফেব', 'মার্চ', 'এপর', 'মে', 'জুন', 'জুল', 'অগ', 'সেপ্ট', 'অক্টো', 'নভ', 'ডিসেম্'],
|
|
14
|
+
dddd: ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পত্তিবার', 'শুক্রবার', 'শনিবার'],
|
|
15
|
+
ddd: ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পত্তি', 'শুক্র', 'শনি'],
|
|
16
|
+
dd: ['রব', 'সম', 'মঙ্গ', 'বু', 'ব্রিহ', 'শু', 'শনি'],
|
|
17
|
+
A: ['রাত', 'সকাল', 'দুপুর', 'বিকাল']
|
|
18
|
+
},
|
|
19
|
+
formatter: {
|
|
20
|
+
A: function (d) {
|
|
21
|
+
var h = d.getHours();
|
|
22
|
+
if (h < 4) {
|
|
23
|
+
return this.res.A[0]; // রাত
|
|
24
|
+
} else if (h < 10) {
|
|
25
|
+
return this.res.A[1]; // সকাল
|
|
26
|
+
} else if (h < 17) {
|
|
27
|
+
return this.res.A[2]; // দুপুর
|
|
28
|
+
} else if (h < 20) {
|
|
29
|
+
return this.res.A[3]; // বিকাল
|
|
30
|
+
}
|
|
31
|
+
return this.res.A[0]; // রাত
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
parser: {
|
|
35
|
+
h12: function (h, a) {
|
|
36
|
+
if (a < 1) {
|
|
37
|
+
return h < 4 || h > 11 ? h : h + 12; // রাত
|
|
38
|
+
} else if (a < 2) {
|
|
39
|
+
return h; // সকাল
|
|
40
|
+
} else if (a < 3) {
|
|
41
|
+
return h > 9 ? h : h + 12; // দুপুর
|
|
42
|
+
}
|
|
43
|
+
return h + 12; // বিকাল
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return code;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export { bn as default };
|