date-and-time 1.0.0 → 2.1.0
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 +28 -10
- package/LOCALE.md +1 -0
- package/PLUGINS.md +185 -63
- package/README.md +91 -76
- package/date-and-time.js +140 -102
- package/date-and-time.min.js +12 -12
- package/esm/date-and-time.es.js +138 -100
- package/esm/date-and-time.es.min.js +13 -12
- package/esm/date-and-time.mjs +138 -100
- package/esm/locale/ar.es.js +1 -1
- package/esm/locale/ar.mjs +1 -1
- package/esm/locale/az.es.js +1 -1
- package/esm/locale/az.mjs +1 -1
- package/esm/locale/bn.es.js +1 -1
- package/esm/locale/bn.mjs +1 -1
- package/esm/locale/cs.es.js +1 -1
- package/esm/locale/cs.mjs +1 -1
- package/esm/locale/de.es.js +1 -1
- package/esm/locale/de.mjs +1 -1
- package/esm/locale/dk.es.js +1 -1
- package/esm/locale/dk.mjs +1 -1
- package/esm/locale/el.es.js +7 -5
- package/esm/locale/el.mjs +7 -5
- package/esm/locale/en.es.js +3 -2
- package/esm/locale/en.mjs +3 -2
- package/esm/locale/es.es.js +1 -1
- package/esm/locale/es.mjs +1 -1
- package/esm/locale/fa.es.js +1 -1
- package/esm/locale/fa.mjs +1 -1
- package/esm/locale/fr.es.js +1 -1
- package/esm/locale/fr.mjs +1 -1
- package/esm/locale/hi.es.js +1 -1
- package/esm/locale/hi.mjs +1 -1
- package/esm/locale/hu.es.js +1 -1
- package/esm/locale/hu.mjs +1 -1
- package/esm/locale/id.es.js +1 -1
- package/esm/locale/id.mjs +1 -1
- package/esm/locale/it.es.js +1 -1
- package/esm/locale/it.mjs +1 -1
- package/esm/locale/ja.es.js +1 -1
- package/esm/locale/ja.mjs +1 -1
- package/esm/locale/jv.es.js +1 -1
- package/esm/locale/jv.mjs +1 -1
- package/esm/locale/ko.es.js +1 -1
- package/esm/locale/ko.mjs +1 -1
- package/esm/locale/my.es.js +1 -1
- package/esm/locale/my.mjs +1 -1
- package/esm/locale/nl.es.js +7 -5
- package/esm/locale/nl.mjs +7 -5
- package/esm/locale/pa-in.es.js +1 -1
- package/esm/locale/pa-in.mjs +1 -1
- package/esm/locale/pl.es.js +7 -5
- package/esm/locale/pl.mjs +7 -5
- package/esm/locale/pt.es.js +1 -1
- package/esm/locale/pt.mjs +1 -1
- package/esm/locale/ro.es.js +1 -1
- package/esm/locale/ro.mjs +1 -1
- package/esm/locale/ru.es.js +1 -1
- package/esm/locale/ru.mjs +1 -1
- package/esm/locale/rw.es.js +1 -1
- package/esm/locale/rw.mjs +1 -1
- package/esm/locale/sr.es.js +1 -1
- package/esm/locale/sr.mjs +1 -1
- package/esm/locale/sv.es.js +22 -0
- package/esm/locale/sv.mjs +22 -0
- package/esm/locale/th.es.js +1 -1
- package/esm/locale/th.mjs +1 -1
- package/esm/locale/tr.es.js +1 -1
- package/esm/locale/tr.mjs +1 -1
- package/esm/locale/uk.es.js +10 -8
- package/esm/locale/uk.mjs +10 -8
- package/esm/locale/uz.es.js +1 -1
- package/esm/locale/uz.mjs +1 -1
- package/esm/locale/vi.es.js +1 -1
- package/esm/locale/vi.mjs +1 -1
- package/esm/locale/zh-cn.es.js +1 -1
- package/esm/locale/zh-cn.mjs +1 -1
- package/esm/locale/zh-tw.es.js +1 -1
- package/esm/locale/zh-tw.mjs +1 -1
- package/esm/plugin/day-of-week.es.js +1 -1
- package/esm/plugin/day-of-week.mjs +1 -1
- package/esm/plugin/meridiem.es.js +20 -11
- package/esm/plugin/meridiem.mjs +20 -11
- package/esm/plugin/microsecond.es.js +1 -1
- package/esm/plugin/microsecond.mjs +1 -1
- package/esm/plugin/ordinal.es.js +1 -1
- package/esm/plugin/ordinal.mjs +1 -1
- package/esm/plugin/timespan.es.js +1 -1
- package/esm/plugin/timespan.mjs +1 -1
- package/esm/plugin/timezone.es.js +73 -0
- package/esm/plugin/timezone.mjs +73 -0
- package/esm/plugin/two-digit-year.es.js +1 -6
- package/esm/plugin/two-digit-year.mjs +1 -6
- package/locale/ar.js +2 -2
- package/locale/az.js +2 -2
- package/locale/bn.js +2 -2
- package/locale/cs.js +2 -2
- package/locale/de.js +2 -2
- package/locale/dk.js +2 -2
- package/locale/el.js +8 -6
- package/locale/en.js +4 -3
- package/locale/es.js +2 -2
- package/locale/fa.js +2 -2
- package/locale/fr.js +2 -2
- package/locale/hi.js +2 -2
- package/locale/hu.js +2 -2
- package/locale/id.js +2 -2
- package/locale/it.js +2 -2
- package/locale/ja.js +2 -2
- package/locale/jv.js +2 -2
- package/locale/ko.js +2 -2
- package/locale/my.js +2 -2
- package/locale/nl.js +8 -6
- package/locale/pa-in.js +3 -3
- package/locale/pl.js +8 -6
- package/locale/pt.js +2 -2
- package/locale/ro.js +2 -2
- package/locale/ru.js +2 -2
- package/locale/rw.js +2 -2
- package/locale/sr.js +2 -2
- package/locale/sv.js +30 -0
- package/locale/th.js +2 -2
- package/locale/tr.js +2 -2
- package/locale/uk.js +11 -9
- package/locale/uz.js +2 -2
- package/locale/vi.js +2 -2
- package/locale/zh-cn.js +3 -3
- package/locale/zh-tw.js +3 -3
- package/package.json +4 -4
- package/plugin/day-of-week.js +3 -3
- package/plugin/meridiem.js +21 -12
- package/plugin/microsecond.js +2 -2
- package/plugin/ordinal.js +2 -2
- package/plugin/timespan.js +2 -2
- package/plugin/timezone.js +81 -0
- package/plugin/two-digit-year.js +3 -8
package/date-and-time.js
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
3
3
|
typeof define === 'function' && define.amd ? define(factory) :
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.date = factory());
|
|
5
|
-
}(this, (function () { 'use strict';
|
|
5
|
+
})(this, (function () { 'use strict';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @preserve date-and-time (c) KNOWLEDGECODE | MIT
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
locales = {},
|
|
11
|
+
var locales = {},
|
|
13
12
|
plugins = {},
|
|
14
13
|
lang = 'en',
|
|
15
14
|
_res = {
|
|
@@ -46,10 +45,11 @@
|
|
|
46
45
|
ddd: function (d/*, formatString*/) { return this.res.ddd[d.getDay()]; },
|
|
47
46
|
dd: function (d/*, formatString*/) { return this.res.dd[d.getDay()]; },
|
|
48
47
|
Z: function (d/*, formatString*/) {
|
|
49
|
-
var offset = d.
|
|
50
|
-
return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - offset % 100 * 0.4)).slice(-4);
|
|
48
|
+
var offset = d.getTimezoneOffset() / 0.6 | 0;
|
|
49
|
+
return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - (offset % 100 * 0.4 | 0))).slice(-4);
|
|
51
50
|
},
|
|
52
|
-
post: function (str) { return str; }
|
|
51
|
+
post: function (str) { return str; },
|
|
52
|
+
res: _res
|
|
53
53
|
},
|
|
54
54
|
_parser = {
|
|
55
55
|
YYYY: function (str/*, formatString */) { return this.exec(/^\d{4}/, str); },
|
|
@@ -110,39 +110,38 @@
|
|
|
110
110
|
}
|
|
111
111
|
return { value: index, length: length };
|
|
112
112
|
},
|
|
113
|
-
pre: function (str) { return str; }
|
|
113
|
+
pre: function (str) { return str; },
|
|
114
|
+
res: _res
|
|
114
115
|
},
|
|
115
|
-
|
|
116
|
-
var
|
|
117
|
-
var Locale = function (r) {
|
|
118
|
-
if (r) { this.res = r; }
|
|
119
|
-
};
|
|
116
|
+
extend = function (base, props, override, res) {
|
|
117
|
+
var obj = {}, key;
|
|
120
118
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
119
|
+
for (key in base) {
|
|
120
|
+
obj[key] = base[key];
|
|
121
|
+
}
|
|
122
|
+
for (key in props || {}) {
|
|
123
|
+
if (!(!!override ^ !!obj[key])) {
|
|
124
|
+
obj[key] = props[key];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (res) {
|
|
128
|
+
obj.res = res;
|
|
129
|
+
}
|
|
130
|
+
return obj;
|
|
131
|
+
},
|
|
132
|
+
proto = {
|
|
133
|
+
_formatter: _formatter,
|
|
134
|
+
_parser: _parser
|
|
135
|
+
},
|
|
136
|
+
localized_proto,
|
|
137
|
+
date;
|
|
139
138
|
|
|
140
139
|
/**
|
|
141
140
|
* Compiling a format string
|
|
142
141
|
* @param {string} formatString - a format string
|
|
143
142
|
* @returns {Array.<string>} a compiled object
|
|
144
143
|
*/
|
|
145
|
-
|
|
144
|
+
proto.compile = function (formatString) {
|
|
146
145
|
var re = /\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g, keys, pattern = [formatString];
|
|
147
146
|
|
|
148
147
|
while ((keys = re.exec(formatString))) {
|
|
@@ -158,12 +157,13 @@
|
|
|
158
157
|
* @param {boolean} [utc] - output as UTC
|
|
159
158
|
* @returns {string} a formatted string
|
|
160
159
|
*/
|
|
161
|
-
|
|
162
|
-
var pattern = typeof arg === 'string' ?
|
|
163
|
-
|
|
164
|
-
|
|
160
|
+
proto.format = function (dateObj, arg, utc) {
|
|
161
|
+
var ctx = this || date, pattern = typeof arg === 'string' ? ctx.compile(arg) : arg,
|
|
162
|
+
offset = dateObj.getTimezoneOffset(),
|
|
163
|
+
d = ctx.addMinutes(dateObj, utc ? offset : 0),
|
|
164
|
+
formatter = ctx._formatter, str = '';
|
|
165
165
|
|
|
166
|
-
d.
|
|
166
|
+
d.getTimezoneOffset = function () { return utc ? 0 : offset; };
|
|
167
167
|
for (var i = 1, len = pattern.length, token; i < len; i++) {
|
|
168
168
|
token = pattern[i];
|
|
169
169
|
str += formatter[token] ? formatter.post(formatter[token](d, pattern[0])) : token.replace(/\[(.*)]/, '$1');
|
|
@@ -177,10 +177,10 @@
|
|
|
177
177
|
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
178
178
|
* @returns {Object} a date structure
|
|
179
179
|
*/
|
|
180
|
-
|
|
181
|
-
var pattern = typeof arg === 'string' ?
|
|
180
|
+
proto.preparse = function (dateString, arg) {
|
|
181
|
+
var ctx = this || date, pattern = typeof arg === 'string' ? ctx.compile(arg) : arg,
|
|
182
182
|
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 },
|
|
183
|
-
comment = /\[(.*)]/, parser =
|
|
183
|
+
comment = /\[(.*)]/, parser = ctx._parser, offset = 0;
|
|
184
184
|
|
|
185
185
|
dateString = parser.pre(dateString);
|
|
186
186
|
for (var i = 1, len = pattern.length, token, result; i < len; i++) {
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
break;
|
|
192
192
|
}
|
|
193
193
|
offset += result.length;
|
|
194
|
-
dt[token.charAt(0)] = result.value;
|
|
194
|
+
dt[result.token || token.charAt(0)] = result.value;
|
|
195
195
|
dt._match++;
|
|
196
196
|
} else if (token === dateString.charAt(offset) || token === ' ') {
|
|
197
197
|
offset++;
|
|
@@ -210,24 +210,6 @@
|
|
|
210
210
|
return dt;
|
|
211
211
|
};
|
|
212
212
|
|
|
213
|
-
/**
|
|
214
|
-
* Validation
|
|
215
|
-
* @param {Object|string} arg1 - a date structure or a date string
|
|
216
|
-
* @param {string|Array.<string>} [arg2] - a format string or its compiled object
|
|
217
|
-
* @returns {boolean} whether the date string is a valid date
|
|
218
|
-
*/
|
|
219
|
-
date.isValid = function (arg1, arg2) {
|
|
220
|
-
var dt = typeof arg1 === 'string' ? date.preparse(arg1, arg2) : arg1,
|
|
221
|
-
last = [31, 28 + date.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
|
|
222
|
-
|
|
223
|
-
return !(
|
|
224
|
-
dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
|
|
225
|
-
dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
|
|
226
|
-
dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
|
|
227
|
-
dt.Z < -720 || dt.Z > 840
|
|
228
|
-
);
|
|
229
|
-
};
|
|
230
|
-
|
|
231
213
|
/**
|
|
232
214
|
* Parsing a Date and Time string
|
|
233
215
|
* @param {string} dateString - a date string
|
|
@@ -235,10 +217,10 @@
|
|
|
235
217
|
* @param {boolean} [utc] - input as UTC
|
|
236
218
|
* @returns {Date} a constructed date
|
|
237
219
|
*/
|
|
238
|
-
|
|
239
|
-
var dt =
|
|
220
|
+
proto.parse = function (dateString, arg, utc) {
|
|
221
|
+
var ctx = this || date, dt = ctx.preparse(dateString, arg);
|
|
240
222
|
|
|
241
|
-
if (
|
|
223
|
+
if (ctx.isValid(dt)) {
|
|
242
224
|
dt.M -= dt.Y < 100 ? 22801 : 1; // 22801 = 1900 * 12 + 1
|
|
243
225
|
if (utc || dt.Z) {
|
|
244
226
|
return new Date(Date.UTC(dt.Y, dt.M, dt.D, dt.H, dt.m + dt.Z, dt.s, dt.S));
|
|
@@ -248,6 +230,24 @@
|
|
|
248
230
|
return new Date(NaN);
|
|
249
231
|
};
|
|
250
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Validation
|
|
235
|
+
* @param {Object|string} arg1 - a date structure or a date string
|
|
236
|
+
* @param {string|Array.<string>} [arg2] - a format string or its compiled object
|
|
237
|
+
* @returns {boolean} whether the date string is a valid date
|
|
238
|
+
*/
|
|
239
|
+
proto.isValid = function (arg1, arg2) {
|
|
240
|
+
var ctx = this || date, dt = typeof arg1 === 'string' ? ctx.preparse(arg1, arg2) : arg1,
|
|
241
|
+
last = [31, 28 + ctx.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
|
|
242
|
+
|
|
243
|
+
return !(
|
|
244
|
+
dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
|
|
245
|
+
dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
|
|
246
|
+
dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
|
|
247
|
+
dt.Z < -720 || dt.Z > 840
|
|
248
|
+
);
|
|
249
|
+
};
|
|
250
|
+
|
|
251
251
|
/**
|
|
252
252
|
* Transforming a Date and Time string
|
|
253
253
|
* @param {string} dateString - a date string
|
|
@@ -256,8 +256,9 @@
|
|
|
256
256
|
* @param {boolean} [utc] - output as UTC
|
|
257
257
|
* @returns {string} a formatted string
|
|
258
258
|
*/
|
|
259
|
-
|
|
260
|
-
|
|
259
|
+
proto.transform = function (dateString, arg1, arg2, utc) {
|
|
260
|
+
const ctx = this || date;
|
|
261
|
+
return ctx.format(ctx.parse(dateString, arg1), arg2, utc);
|
|
261
262
|
};
|
|
262
263
|
|
|
263
264
|
/**
|
|
@@ -266,8 +267,8 @@
|
|
|
266
267
|
* @param {number} years - number of years to add
|
|
267
268
|
* @returns {Date} a date after adding the value
|
|
268
269
|
*/
|
|
269
|
-
|
|
270
|
-
return date.addMonths(dateObj, years * 12);
|
|
270
|
+
proto.addYears = function (dateObj, years) {
|
|
271
|
+
return (this || date).addMonths(dateObj, years * 12);
|
|
271
272
|
};
|
|
272
273
|
|
|
273
274
|
/**
|
|
@@ -276,7 +277,7 @@
|
|
|
276
277
|
* @param {number} months - number of months to add
|
|
277
278
|
* @returns {Date} a date after adding the value
|
|
278
279
|
*/
|
|
279
|
-
|
|
280
|
+
proto.addMonths = function (dateObj, months) {
|
|
280
281
|
var d = new Date(dateObj.getTime());
|
|
281
282
|
|
|
282
283
|
d.setMonth(d.getMonth() + months);
|
|
@@ -289,7 +290,7 @@
|
|
|
289
290
|
* @param {number} days - number of days to add
|
|
290
291
|
* @returns {Date} a date after adding the value
|
|
291
292
|
*/
|
|
292
|
-
|
|
293
|
+
proto.addDays = function (dateObj, days) {
|
|
293
294
|
var d = new Date(dateObj.getTime());
|
|
294
295
|
|
|
295
296
|
d.setDate(d.getDate() + days);
|
|
@@ -302,8 +303,8 @@
|
|
|
302
303
|
* @param {number} hours - number of hours to add
|
|
303
304
|
* @returns {Date} a date after adding the value
|
|
304
305
|
*/
|
|
305
|
-
|
|
306
|
-
return date.addMinutes(dateObj, hours * 60);
|
|
306
|
+
proto.addHours = function (dateObj, hours) {
|
|
307
|
+
return (this || date).addMinutes(dateObj, hours * 60);
|
|
307
308
|
};
|
|
308
309
|
|
|
309
310
|
/**
|
|
@@ -312,8 +313,8 @@
|
|
|
312
313
|
* @param {number} minutes - number of minutes to add
|
|
313
314
|
* @returns {Date} a date after adding the value
|
|
314
315
|
*/
|
|
315
|
-
|
|
316
|
-
return date.addSeconds(dateObj, minutes * 60);
|
|
316
|
+
proto.addMinutes = function (dateObj, minutes) {
|
|
317
|
+
return (this || date).addSeconds(dateObj, minutes * 60);
|
|
317
318
|
};
|
|
318
319
|
|
|
319
320
|
/**
|
|
@@ -322,8 +323,8 @@
|
|
|
322
323
|
* @param {number} seconds - number of seconds to add
|
|
323
324
|
* @returns {Date} a date after adding the value
|
|
324
325
|
*/
|
|
325
|
-
|
|
326
|
-
return date.addMilliseconds(dateObj, seconds * 1000);
|
|
326
|
+
proto.addSeconds = function (dateObj, seconds) {
|
|
327
|
+
return (this || date).addMilliseconds(dateObj, seconds * 1000);
|
|
327
328
|
};
|
|
328
329
|
|
|
329
330
|
/**
|
|
@@ -332,7 +333,7 @@
|
|
|
332
333
|
* @param {number} milliseconds - number of milliseconds to add
|
|
333
334
|
* @returns {Date} a date after adding the value
|
|
334
335
|
*/
|
|
335
|
-
|
|
336
|
+
proto.addMilliseconds = function (dateObj, milliseconds) {
|
|
336
337
|
return new Date(dateObj.getTime() + milliseconds);
|
|
337
338
|
};
|
|
338
339
|
|
|
@@ -342,7 +343,7 @@
|
|
|
342
343
|
* @param {Date} date2 - a Date object
|
|
343
344
|
* @returns {Object} a result object subtracting date2 from date1
|
|
344
345
|
*/
|
|
345
|
-
|
|
346
|
+
proto.subtract = function (date1, date2) {
|
|
346
347
|
var delta = date1.getTime() - date2.getTime();
|
|
347
348
|
|
|
348
349
|
return {
|
|
@@ -369,7 +370,7 @@
|
|
|
369
370
|
* @param {number} y - year
|
|
370
371
|
* @returns {boolean} whether year is leap year
|
|
371
372
|
*/
|
|
372
|
-
|
|
373
|
+
proto.isLeapYear = function (y) {
|
|
373
374
|
return (!(y % 4) && !!(y % 100)) || !(y % 400);
|
|
374
375
|
};
|
|
375
376
|
|
|
@@ -379,22 +380,62 @@
|
|
|
379
380
|
* @param {Date} date2 - a Date object
|
|
380
381
|
* @returns {boolean} whether the two dates are the same day (time is ignored)
|
|
381
382
|
*/
|
|
382
|
-
|
|
383
|
+
proto.isSameDay = function (date1, date2) {
|
|
383
384
|
return date1.toDateString() === date2.toDateString();
|
|
384
385
|
};
|
|
385
386
|
|
|
386
387
|
/**
|
|
387
|
-
*
|
|
388
|
-
* @param {
|
|
389
|
-
* @param {
|
|
388
|
+
* Defining new locale
|
|
389
|
+
* @param {string} code - language code
|
|
390
|
+
* @param {Function} locale - locale installer
|
|
391
|
+
* @returns {string} current language code
|
|
392
|
+
*/
|
|
393
|
+
proto.locale = function (code, locale) {
|
|
394
|
+
if (!locales[code]) {
|
|
395
|
+
locales[code] = locale;
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Defining new plugin
|
|
401
|
+
* @param {string} name - plugin name
|
|
402
|
+
* @param {Function} plugin - plugin installer
|
|
403
|
+
* @returns {void}
|
|
404
|
+
*/
|
|
405
|
+
proto.plugin = function (name, plugin) {
|
|
406
|
+
if (!plugins[name]) {
|
|
407
|
+
plugins[name] = plugin;
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
localized_proto = extend(proto);
|
|
412
|
+
date = extend(proto);
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Changing locale
|
|
416
|
+
* @param {Function|string} [locale] - locale object | language code
|
|
390
417
|
* @returns {string} current language code
|
|
391
418
|
*/
|
|
392
|
-
date.locale = function (
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
419
|
+
date.locale = function (locale) {
|
|
420
|
+
var install = typeof locale === 'function' ? locale : date.locale[locale];
|
|
421
|
+
|
|
422
|
+
if (!install) {
|
|
423
|
+
return lang;
|
|
424
|
+
}
|
|
425
|
+
lang = install(proto);
|
|
426
|
+
|
|
427
|
+
var extension = locales[lang] || {};
|
|
428
|
+
var res = extend(_res, extension.res, true);
|
|
429
|
+
var formatter = extend(_formatter, extension.formatter, true, res);
|
|
430
|
+
var parser = extend(_parser, extension.parser, true, res);
|
|
431
|
+
|
|
432
|
+
date._formatter = localized_proto._formatter = formatter;
|
|
433
|
+
date._parser = localized_proto._parser = parser;
|
|
434
|
+
|
|
435
|
+
for (var plugin in plugins) {
|
|
436
|
+
date.extend(plugins[plugin]);
|
|
397
437
|
}
|
|
438
|
+
|
|
398
439
|
return lang;
|
|
399
440
|
};
|
|
400
441
|
|
|
@@ -404,37 +445,34 @@
|
|
|
404
445
|
* @returns {void}
|
|
405
446
|
*/
|
|
406
447
|
date.extend = function (extension) {
|
|
448
|
+
var res = extend(date._parser.res, extension.res);
|
|
407
449
|
var extender = extension.extender || {};
|
|
408
450
|
|
|
451
|
+
date._formatter = extend(date._formatter, extension.formatter, false, res);
|
|
452
|
+
date._parser = extend(date._parser, extension.parser, false, res);
|
|
453
|
+
|
|
409
454
|
for (var key in extender) {
|
|
410
455
|
if (!date[key]) {
|
|
411
456
|
date[key] = extender[key];
|
|
412
457
|
}
|
|
413
458
|
}
|
|
414
|
-
if (extension.formatter || extension.parser || extension.res) {
|
|
415
|
-
customize(lang, locales[lang], extension);
|
|
416
|
-
}
|
|
417
459
|
};
|
|
418
460
|
|
|
419
461
|
/**
|
|
420
|
-
* Importing
|
|
421
|
-
* @param {Function|string}
|
|
422
|
-
* @param {Object} [plugin] - plugin object
|
|
462
|
+
* Importing plugin
|
|
463
|
+
* @param {Function|string} plugin - plugin object | plugin name
|
|
423
464
|
* @returns {void}
|
|
424
465
|
*/
|
|
425
|
-
date.plugin = function (
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
}
|
|
430
|
-
} else {
|
|
431
|
-
(typeof name === 'function' ? name : date.plugin[name] || function () {})(date);
|
|
466
|
+
date.plugin = function (plugin) {
|
|
467
|
+
var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
|
|
468
|
+
|
|
469
|
+
if (install) {
|
|
470
|
+
date.extend(plugins[install(proto, localized_proto)] || {});
|
|
432
471
|
}
|
|
433
472
|
};
|
|
434
473
|
|
|
435
|
-
|
|
436
|
-
date.locale(lang, {});
|
|
474
|
+
var date$1 = date;
|
|
437
475
|
|
|
438
|
-
return date;
|
|
476
|
+
return date$1;
|
|
439
477
|
|
|
440
|
-
}))
|
|
478
|
+
}));
|
package/date-and-time.min.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/*
|
|
2
2
|
date-and-time (c) KNOWLEDGECODE | MIT
|
|
3
3
|
*/
|
|
4
|
-
'use strict';(function(
|
|
5
|
-
ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["AM","PM"]},
|
|
4
|
+
'use strict';(function(p,m){"object"===typeof exports&&"undefined"!==typeof module?module.exports=m():"function"===typeof define&&define.amd?define(m):(p="undefined"!==typeof globalThis?globalThis:p||self,p.date=m())})(this,function(){var p={},m={},r="en",t={MMMM:"January February March April May June July August September October November December".split(" "),MMM:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),dddd:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
|
|
5
|
+
ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["AM","PM"]},w={YYYY:function(a){return("000"+a.getFullYear()).slice(-4)},YY:function(a){return("0"+a.getFullYear()).slice(-2)},Y:function(a){return""+a.getFullYear()},MMMM:function(a){return this.res.MMMM[a.getMonth()]},MMM:function(a){return this.res.MMM[a.getMonth()]},MM:function(a){return("0"+(a.getMonth()+1)).slice(-2)},M:function(a){return""+(a.getMonth()+1)},DD:function(a){return("0"+a.getDate()).slice(-2)},
|
|
6
6
|
D:function(a){return""+a.getDate()},HH:function(a){return("0"+a.getHours()).slice(-2)},H:function(a){return""+a.getHours()},A:function(a){return this.res.A[11<a.getHours()|0]},hh:function(a){return("0"+(a.getHours()%12||12)).slice(-2)},h:function(a){return""+(a.getHours()%12||12)},mm:function(a){return("0"+a.getMinutes()).slice(-2)},m:function(a){return""+a.getMinutes()},ss:function(a){return("0"+a.getSeconds()).slice(-2)},s:function(a){return""+a.getSeconds()},SSS:function(a){return("00"+a.getMilliseconds()).slice(-3)},
|
|
7
|
-
SS:function(a){return("0"+(a.getMilliseconds()/10|0)).slice(-2)},S:function(a){return""+(a.getMilliseconds()/100|0)},dddd:function(a){return this.res.dddd[a.getDay()]},ddd:function(a){return this.res.ddd[a.getDay()]},dd:function(a){return this.res.dd[a.getDay()]},Z:function(a){a=a.
|
|
8
|
-
this.find(this.res.MMMM,a);a.value++;return a},MMM:function(a){a=this.find(this.res.MMM,a);a.value++;return a},MM:function(a){return this.exec(/^\d\d/,a)},M:function(a){return this.exec(/^\d\d?/,a)},DD:function(a){return this.exec(/^\d\d/,a)},D:function(a){return this.exec(/^\d\d?/,a)},HH:function(a){return this.exec(/^\d\d/,a)},H:function(a){return this.exec(/^\d\d?/,a)},A:function(a){return this.find(this.res.A,a)},hh:function(a){return this.exec(/^\d\d/,a)},h:function(a){return this.exec(/^\d\d?/,
|
|
9
|
-
a)},mm:function(a){return this.exec(/^\d\d/,a)},m:function(a){return this.exec(/^\d\d?/,a)},ss:function(a){return this.exec(/^\d\d/,a)},s:function(a){return this.exec(/^\d\d?/,a)},SSS:function(a){return this.exec(/^\d{1,3}/,a)},SS:function(a){a=this.exec(/^\d\d?/,a);a.value*=10;return a},S:function(a){a=this.exec(/^\d/,a);a.value*=100;return a},Z:function(a){a=this.exec(/^[\+-]\d{2}[0-5]\d/,a);a.value=-60*(a.value/100|0)-a.value%100;return a},h12:function(a,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
0,31,30,31,30,31,31,30,31,30,31][a.M-1];return!(1>a._index||1>a._length||a._index-a._length||1>a._match||1>a.Y||9999<a.Y||1>a.M||12<a.M||1>a.D||a.D>c||0>a.H||23<a.H||0>a.m||59<a.m||0>a.s||59<a.s||0>a.S||999<a.S||-720>a.Z||840<a.Z)};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
(b
|
|
7
|
+
SS:function(a){return("0"+(a.getMilliseconds()/10|0)).slice(-2)},S:function(a){return""+(a.getMilliseconds()/100|0)},dddd:function(a){return this.res.dddd[a.getDay()]},ddd:function(a){return this.res.ddd[a.getDay()]},dd:function(a){return this.res.dd[a.getDay()]},Z:function(a){a=a.getTimezoneOffset()/.6|0;return(0<a?"-":"+")+("000"+Math.abs(a-(a%100*.4|0))).slice(-4)},post:function(a){return a},res:t},x={YYYY:function(a){return this.exec(/^\d{4}/,a)},Y:function(a){return this.exec(/^\d{1,4}/,a)},
|
|
8
|
+
MMMM:function(a){a=this.find(this.res.MMMM,a);a.value++;return a},MMM:function(a){a=this.find(this.res.MMM,a);a.value++;return a},MM:function(a){return this.exec(/^\d\d/,a)},M:function(a){return this.exec(/^\d\d?/,a)},DD:function(a){return this.exec(/^\d\d/,a)},D:function(a){return this.exec(/^\d\d?/,a)},HH:function(a){return this.exec(/^\d\d/,a)},H:function(a){return this.exec(/^\d\d?/,a)},A:function(a){return this.find(this.res.A,a)},hh:function(a){return this.exec(/^\d\d/,a)},h:function(a){return this.exec(/^\d\d?/,
|
|
9
|
+
a)},mm:function(a){return this.exec(/^\d\d/,a)},m:function(a){return this.exec(/^\d\d?/,a)},ss:function(a){return this.exec(/^\d\d/,a)},s:function(a){return this.exec(/^\d\d?/,a)},SSS:function(a){return this.exec(/^\d{1,3}/,a)},SS:function(a){a=this.exec(/^\d\d?/,a);a.value*=10;return a},S:function(a){a=this.exec(/^\d/,a);a.value*=100;return a},Z:function(a){a=this.exec(/^[\+-]\d{2}[0-5]\d/,a);a.value=-60*(a.value/100|0)-a.value%100;return a},h12:function(a,b){return(12===a?0:a)+12*b},exec:function(a,
|
|
10
|
+
b){a=(a.exec(b)||[""])[0];return{value:a|0,length:a.length}},find:function(a,b){for(var c=-1,d=0,h=0,g=a.length,l;h<g;h++)l=a[h],!b.indexOf(l)&&l.length>d&&(c=h,d=l.length);return{value:c,length:d}},pre:function(a){return a},res:t},n=function(a,b,c,d){var h={},g;for(g in a)h[g]=a[g];for(g in b||{})!!c^!!h[g]||(h[g]=b[g]);d&&(h.res=d);return h},f={_formatter:w,_parser:x};f.compile=function(a){for(var b=/\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g,c,d=[a];c=b.exec(a);)d[d.length]=c[0];return d};
|
|
11
|
+
f.format=function(a,b,c){var d=this||e;b="string"===typeof b?d.compile(b):b;var h=a.getTimezoneOffset();a=d.addMinutes(a,c?h:0);d=d._formatter;var g="";a.getTimezoneOffset=function(){return c?0:h};for(var l=1,u=b.length,k;l<u;l++)k=b[l],g+=d[k]?d.post(d[k](a,b[0])):k.replace(/\[(.*)]/,"$1");return g};f.preparse=function(a,b){var c=this||e;b="string"===typeof b?c.compile(b):b;var d={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},h=/\[(.*)]/;c=c._parser;var g=0;a=c.pre(a);for(var l=
|
|
12
|
+
1,u=b.length,k,q;l<u;l++)if(k=b[l],c[k]){q=c[k](a.slice(g),b[0]);if(!q.length)break;g+=q.length;d[q.token||k.charAt(0)]=q.value;d._match++}else if(k===a.charAt(g)||" "===k)g++;else if(h.test(k)&&!a.slice(g).indexOf(h.exec(k)[1]))g+=k.length-2;else{"..."===k&&(g=a.length);break}d.H=d.H||c.h12(d.h,d.A);d._index=g;d._length=a.length;return d};f.parse=function(a,b,c){var d=this||e;a=d.preparse(a,b);return d.isValid(a)?(a.M-=100>a.Y?22801:1,c||a.Z?new Date(Date.UTC(a.Y,a.M,a.D,a.H,a.m+a.Z,a.s,a.S)):new Date(a.Y,
|
|
13
|
+
a.M,a.D,a.H,a.m,a.s,a.S)):new Date(NaN)};f.isValid=function(a,b){var c=this||e;a="string"===typeof a?c.preparse(a,b):a;c=[31,28+c.isLeapYear(a.Y)|0,31,30,31,30,31,31,30,31,30,31][a.M-1];return!(1>a._index||1>a._length||a._index-a._length||1>a._match||1>a.Y||9999<a.Y||1>a.M||12<a.M||1>a.D||a.D>c||0>a.H||23<a.H||0>a.m||59<a.m||0>a.s||59<a.s||0>a.S||999<a.S||-720>a.Z||840<a.Z)};f.transform=function(a,b,c,d){let h=this||e;return h.format(h.parse(a,b),c,d)};f.addYears=function(a,b){return(this||e).addMonths(a,
|
|
14
|
+
12*b)};f.addMonths=function(a,b){a=new Date(a.getTime());a.setMonth(a.getMonth()+b);return a};f.addDays=function(a,b){a=new Date(a.getTime());a.setDate(a.getDate()+b);return a};f.addHours=function(a,b){return(this||e).addMinutes(a,60*b)};f.addMinutes=function(a,b){return(this||e).addSeconds(a,60*b)};f.addSeconds=function(a,b){return(this||e).addMilliseconds(a,1E3*b)};f.addMilliseconds=function(a,b){return new Date(a.getTime()+b)};f.subtract=function(a,b){var c=a.getTime()-b.getTime();return{toMilliseconds:function(){return c},
|
|
15
|
+
toSeconds:function(){return c/1E3},toMinutes:function(){return c/6E4},toHours:function(){return c/36E5},toDays:function(){return c/864E5}}};f.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};f.isSameDay=function(a,b){return a.toDateString()===b.toDateString()};f.locale=function(a,b){p[a]||(p[a]=b)};f.plugin=function(a,b){m[a]||(m[a]=b)};var v=n(f);var e=n(f);e.locale=function(a){a="function"===typeof a?a:e.locale[a];if(!a)return r;r=a(f);var b=p[r]||{},c=n(t,b.res,!0);a=n(w,b.formatter,!0,
|
|
16
|
+
c);b=n(x,b.parser,!0,c);e._formatter=v._formatter=a;e._parser=v._parser=b;for(var d in m)e.extend(m[d]);return r};e.extend=function(a){var b=n(e._parser.res,a.res),c=a.extender||{};e._formatter=n(e._formatter,a.formatter,!1,b);e._parser=n(e._parser,a.parser,!1,b);for(var d in c)e[d]||(e[d]=c[d])};e.plugin=function(a){(a="function"===typeof a?a:e.plugin[a])&&e.extend(m[a(f,v)]||{})};return e})
|