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.
Files changed (136) hide show
  1. package/EXTEND.md +28 -10
  2. package/LOCALE.md +1 -0
  3. package/PLUGINS.md +185 -63
  4. package/README.md +91 -76
  5. package/date-and-time.js +140 -102
  6. package/date-and-time.min.js +12 -12
  7. package/esm/date-and-time.es.js +138 -100
  8. package/esm/date-and-time.es.min.js +13 -12
  9. package/esm/date-and-time.mjs +138 -100
  10. package/esm/locale/ar.es.js +1 -1
  11. package/esm/locale/ar.mjs +1 -1
  12. package/esm/locale/az.es.js +1 -1
  13. package/esm/locale/az.mjs +1 -1
  14. package/esm/locale/bn.es.js +1 -1
  15. package/esm/locale/bn.mjs +1 -1
  16. package/esm/locale/cs.es.js +1 -1
  17. package/esm/locale/cs.mjs +1 -1
  18. package/esm/locale/de.es.js +1 -1
  19. package/esm/locale/de.mjs +1 -1
  20. package/esm/locale/dk.es.js +1 -1
  21. package/esm/locale/dk.mjs +1 -1
  22. package/esm/locale/el.es.js +7 -5
  23. package/esm/locale/el.mjs +7 -5
  24. package/esm/locale/en.es.js +3 -2
  25. package/esm/locale/en.mjs +3 -2
  26. package/esm/locale/es.es.js +1 -1
  27. package/esm/locale/es.mjs +1 -1
  28. package/esm/locale/fa.es.js +1 -1
  29. package/esm/locale/fa.mjs +1 -1
  30. package/esm/locale/fr.es.js +1 -1
  31. package/esm/locale/fr.mjs +1 -1
  32. package/esm/locale/hi.es.js +1 -1
  33. package/esm/locale/hi.mjs +1 -1
  34. package/esm/locale/hu.es.js +1 -1
  35. package/esm/locale/hu.mjs +1 -1
  36. package/esm/locale/id.es.js +1 -1
  37. package/esm/locale/id.mjs +1 -1
  38. package/esm/locale/it.es.js +1 -1
  39. package/esm/locale/it.mjs +1 -1
  40. package/esm/locale/ja.es.js +1 -1
  41. package/esm/locale/ja.mjs +1 -1
  42. package/esm/locale/jv.es.js +1 -1
  43. package/esm/locale/jv.mjs +1 -1
  44. package/esm/locale/ko.es.js +1 -1
  45. package/esm/locale/ko.mjs +1 -1
  46. package/esm/locale/my.es.js +1 -1
  47. package/esm/locale/my.mjs +1 -1
  48. package/esm/locale/nl.es.js +7 -5
  49. package/esm/locale/nl.mjs +7 -5
  50. package/esm/locale/pa-in.es.js +1 -1
  51. package/esm/locale/pa-in.mjs +1 -1
  52. package/esm/locale/pl.es.js +7 -5
  53. package/esm/locale/pl.mjs +7 -5
  54. package/esm/locale/pt.es.js +1 -1
  55. package/esm/locale/pt.mjs +1 -1
  56. package/esm/locale/ro.es.js +1 -1
  57. package/esm/locale/ro.mjs +1 -1
  58. package/esm/locale/ru.es.js +1 -1
  59. package/esm/locale/ru.mjs +1 -1
  60. package/esm/locale/rw.es.js +1 -1
  61. package/esm/locale/rw.mjs +1 -1
  62. package/esm/locale/sr.es.js +1 -1
  63. package/esm/locale/sr.mjs +1 -1
  64. package/esm/locale/sv.es.js +22 -0
  65. package/esm/locale/sv.mjs +22 -0
  66. package/esm/locale/th.es.js +1 -1
  67. package/esm/locale/th.mjs +1 -1
  68. package/esm/locale/tr.es.js +1 -1
  69. package/esm/locale/tr.mjs +1 -1
  70. package/esm/locale/uk.es.js +10 -8
  71. package/esm/locale/uk.mjs +10 -8
  72. package/esm/locale/uz.es.js +1 -1
  73. package/esm/locale/uz.mjs +1 -1
  74. package/esm/locale/vi.es.js +1 -1
  75. package/esm/locale/vi.mjs +1 -1
  76. package/esm/locale/zh-cn.es.js +1 -1
  77. package/esm/locale/zh-cn.mjs +1 -1
  78. package/esm/locale/zh-tw.es.js +1 -1
  79. package/esm/locale/zh-tw.mjs +1 -1
  80. package/esm/plugin/day-of-week.es.js +1 -1
  81. package/esm/plugin/day-of-week.mjs +1 -1
  82. package/esm/plugin/meridiem.es.js +20 -11
  83. package/esm/plugin/meridiem.mjs +20 -11
  84. package/esm/plugin/microsecond.es.js +1 -1
  85. package/esm/plugin/microsecond.mjs +1 -1
  86. package/esm/plugin/ordinal.es.js +1 -1
  87. package/esm/plugin/ordinal.mjs +1 -1
  88. package/esm/plugin/timespan.es.js +1 -1
  89. package/esm/plugin/timespan.mjs +1 -1
  90. package/esm/plugin/timezone.es.js +73 -0
  91. package/esm/plugin/timezone.mjs +73 -0
  92. package/esm/plugin/two-digit-year.es.js +1 -6
  93. package/esm/plugin/two-digit-year.mjs +1 -6
  94. package/locale/ar.js +2 -2
  95. package/locale/az.js +2 -2
  96. package/locale/bn.js +2 -2
  97. package/locale/cs.js +2 -2
  98. package/locale/de.js +2 -2
  99. package/locale/dk.js +2 -2
  100. package/locale/el.js +8 -6
  101. package/locale/en.js +4 -3
  102. package/locale/es.js +2 -2
  103. package/locale/fa.js +2 -2
  104. package/locale/fr.js +2 -2
  105. package/locale/hi.js +2 -2
  106. package/locale/hu.js +2 -2
  107. package/locale/id.js +2 -2
  108. package/locale/it.js +2 -2
  109. package/locale/ja.js +2 -2
  110. package/locale/jv.js +2 -2
  111. package/locale/ko.js +2 -2
  112. package/locale/my.js +2 -2
  113. package/locale/nl.js +8 -6
  114. package/locale/pa-in.js +3 -3
  115. package/locale/pl.js +8 -6
  116. package/locale/pt.js +2 -2
  117. package/locale/ro.js +2 -2
  118. package/locale/ru.js +2 -2
  119. package/locale/rw.js +2 -2
  120. package/locale/sr.js +2 -2
  121. package/locale/sv.js +30 -0
  122. package/locale/th.js +2 -2
  123. package/locale/tr.js +2 -2
  124. package/locale/uk.js +11 -9
  125. package/locale/uz.js +2 -2
  126. package/locale/vi.js +2 -2
  127. package/locale/zh-cn.js +3 -3
  128. package/locale/zh-tw.js +3 -3
  129. package/package.json +4 -4
  130. package/plugin/day-of-week.js +3 -3
  131. package/plugin/meridiem.js +21 -12
  132. package/plugin/microsecond.js +2 -2
  133. package/plugin/ordinal.js +2 -2
  134. package/plugin/timespan.js +2 -2
  135. package/plugin/timezone.js +81 -0
  136. package/plugin/two-digit-year.js +3 -8
@@ -2,8 +2,7 @@
2
2
  * @preserve date-and-time (c) KNOWLEDGECODE | MIT
3
3
  */
4
4
 
5
- var date = {},
6
- locales = {},
5
+ var locales = {},
7
6
  plugins = {},
8
7
  lang = 'en',
9
8
  _res = {
@@ -40,10 +39,11 @@ var date = {},
40
39
  ddd: function (d/*, formatString*/) { return this.res.ddd[d.getDay()]; },
41
40
  dd: function (d/*, formatString*/) { return this.res.dd[d.getDay()]; },
42
41
  Z: function (d/*, formatString*/) {
43
- var offset = d.utc ? 0 : d.getTimezoneOffset() / 0.6;
44
- return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - offset % 100 * 0.4)).slice(-4);
42
+ var offset = d.getTimezoneOffset() / 0.6 | 0;
43
+ return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - (offset % 100 * 0.4 | 0))).slice(-4);
45
44
  },
46
- post: function (str) { return str; }
45
+ post: function (str) { return str; },
46
+ res: _res
47
47
  },
48
48
  _parser = {
49
49
  YYYY: function (str/*, formatString */) { return this.exec(/^\d{4}/, str); },
@@ -104,39 +104,38 @@ var date = {},
104
104
  }
105
105
  return { value: index, length: length };
106
106
  },
107
- pre: function (str) { return str; }
107
+ pre: function (str) { return str; },
108
+ res: _res
108
109
  },
109
- customize = function (code, base, locale) {
110
- var extend = function (proto, props, res) {
111
- var Locale = function (r) {
112
- if (r) { this.res = r; }
113
- };
110
+ extend = function (base, props, override, res) {
111
+ var obj = {}, key;
114
112
 
115
- Locale.prototype = proto;
116
- Locale.prototype.constructor = Locale;
117
-
118
- var newLocale = new Locale(res),
119
- value;
120
-
121
- for (var key in props || {}) {
122
- value = props[key];
123
- newLocale[key] = value.slice ? value.slice() : value;
124
- }
125
- return newLocale;
126
- },
127
- loc = { res: extend(base.res, locale.res) };
128
-
129
- loc.formatter = extend(base.formatter, locale.formatter, loc.res);
130
- loc.parser = extend(base.parser, locale.parser, loc.res);
131
- locales[code] = loc;
132
- };
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
+ proto = {
127
+ _formatter: _formatter,
128
+ _parser: _parser
129
+ },
130
+ localized_proto,
131
+ date;
133
132
 
134
133
  /**
135
134
  * Compiling a format string
136
135
  * @param {string} formatString - a format string
137
136
  * @returns {Array.<string>} a compiled object
138
137
  */
139
- date.compile = function (formatString) {
138
+ proto.compile = function (formatString) {
140
139
  var re = /\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g, keys, pattern = [formatString];
141
140
 
142
141
  while ((keys = re.exec(formatString))) {
@@ -152,12 +151,13 @@ date.compile = function (formatString) {
152
151
  * @param {boolean} [utc] - output as UTC
153
152
  * @returns {string} a formatted string
154
153
  */
155
- date.format = function (dateObj, arg, utc) {
156
- var pattern = typeof arg === 'string' ? date.compile(arg) : arg,
157
- d = date.addMinutes(dateObj, utc ? dateObj.getTimezoneOffset() : 0),
158
- formatter = locales[lang].formatter, str = '';
154
+ proto.format = function (dateObj, arg, utc) {
155
+ var ctx = this || date, pattern = typeof arg === 'string' ? ctx.compile(arg) : arg,
156
+ offset = dateObj.getTimezoneOffset(),
157
+ d = ctx.addMinutes(dateObj, utc ? offset : 0),
158
+ formatter = ctx._formatter, str = '';
159
159
 
160
- d.utc = utc || false;
160
+ d.getTimezoneOffset = function () { return utc ? 0 : offset; };
161
161
  for (var i = 1, len = pattern.length, token; i < len; i++) {
162
162
  token = pattern[i];
163
163
  str += formatter[token] ? formatter.post(formatter[token](d, pattern[0])) : token.replace(/\[(.*)]/, '$1');
@@ -171,10 +171,10 @@ date.format = function (dateObj, arg, utc) {
171
171
  * @param {string|Array.<string>} arg - a format string or its compiled object
172
172
  * @returns {Object} a date structure
173
173
  */
174
- date.preparse = function (dateString, arg) {
175
- var pattern = typeof arg === 'string' ? date.compile(arg) : arg,
174
+ proto.preparse = function (dateString, arg) {
175
+ var ctx = this || date, pattern = typeof arg === 'string' ? ctx.compile(arg) : arg,
176
176
  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 },
177
- comment = /\[(.*)]/, parser = locales[lang].parser, offset = 0;
177
+ comment = /\[(.*)]/, parser = ctx._parser, offset = 0;
178
178
 
179
179
  dateString = parser.pre(dateString);
180
180
  for (var i = 1, len = pattern.length, token, result; i < len; i++) {
@@ -185,7 +185,7 @@ date.preparse = function (dateString, arg) {
185
185
  break;
186
186
  }
187
187
  offset += result.length;
188
- dt[token.charAt(0)] = result.value;
188
+ dt[result.token || token.charAt(0)] = result.value;
189
189
  dt._match++;
190
190
  } else if (token === dateString.charAt(offset) || token === ' ') {
191
191
  offset++;
@@ -204,24 +204,6 @@ date.preparse = function (dateString, arg) {
204
204
  return dt;
205
205
  };
206
206
 
207
- /**
208
- * Validation
209
- * @param {Object|string} arg1 - a date structure or a date string
210
- * @param {string|Array.<string>} [arg2] - a format string or its compiled object
211
- * @returns {boolean} whether the date string is a valid date
212
- */
213
- date.isValid = function (arg1, arg2) {
214
- var dt = typeof arg1 === 'string' ? date.preparse(arg1, arg2) : arg1,
215
- last = [31, 28 + date.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
216
-
217
- return !(
218
- dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
219
- dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
220
- dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
221
- dt.Z < -720 || dt.Z > 840
222
- );
223
- };
224
-
225
207
  /**
226
208
  * Parsing a Date and Time string
227
209
  * @param {string} dateString - a date string
@@ -229,10 +211,10 @@ date.isValid = function (arg1, arg2) {
229
211
  * @param {boolean} [utc] - input as UTC
230
212
  * @returns {Date} a constructed date
231
213
  */
232
- date.parse = function (dateString, arg, utc) {
233
- var dt = date.preparse(dateString, arg);
214
+ proto.parse = function (dateString, arg, utc) {
215
+ var ctx = this || date, dt = ctx.preparse(dateString, arg);
234
216
 
235
- if (date.isValid(dt)) {
217
+ if (ctx.isValid(dt)) {
236
218
  dt.M -= dt.Y < 100 ? 22801 : 1; // 22801 = 1900 * 12 + 1
237
219
  if (utc || dt.Z) {
238
220
  return new Date(Date.UTC(dt.Y, dt.M, dt.D, dt.H, dt.m + dt.Z, dt.s, dt.S));
@@ -242,6 +224,24 @@ date.parse = function (dateString, arg, utc) {
242
224
  return new Date(NaN);
243
225
  };
244
226
 
227
+ /**
228
+ * Validation
229
+ * @param {Object|string} arg1 - a date structure or a date string
230
+ * @param {string|Array.<string>} [arg2] - a format string or its compiled object
231
+ * @returns {boolean} whether the date string is a valid date
232
+ */
233
+ proto.isValid = function (arg1, arg2) {
234
+ var ctx = this || date, dt = typeof arg1 === 'string' ? ctx.preparse(arg1, arg2) : arg1,
235
+ last = [31, 28 + ctx.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
236
+
237
+ return !(
238
+ dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
239
+ dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
240
+ dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
241
+ dt.Z < -720 || dt.Z > 840
242
+ );
243
+ };
244
+
245
245
  /**
246
246
  * Transforming a Date and Time string
247
247
  * @param {string} dateString - a date string
@@ -250,8 +250,9 @@ date.parse = function (dateString, arg, utc) {
250
250
  * @param {boolean} [utc] - output as UTC
251
251
  * @returns {string} a formatted string
252
252
  */
253
- date.transform = function (dateString, arg1, arg2, utc) {
254
- return date.format(date.parse(dateString, arg1), arg2, utc);
253
+ proto.transform = function (dateString, arg1, arg2, utc) {
254
+ const ctx = this || date;
255
+ return ctx.format(ctx.parse(dateString, arg1), arg2, utc);
255
256
  };
256
257
 
257
258
  /**
@@ -260,8 +261,8 @@ date.transform = function (dateString, arg1, arg2, utc) {
260
261
  * @param {number} years - number of years to add
261
262
  * @returns {Date} a date after adding the value
262
263
  */
263
- date.addYears = function (dateObj, years) {
264
- return date.addMonths(dateObj, years * 12);
264
+ proto.addYears = function (dateObj, years) {
265
+ return (this || date).addMonths(dateObj, years * 12);
265
266
  };
266
267
 
267
268
  /**
@@ -270,7 +271,7 @@ date.addYears = function (dateObj, years) {
270
271
  * @param {number} months - number of months to add
271
272
  * @returns {Date} a date after adding the value
272
273
  */
273
- date.addMonths = function (dateObj, months) {
274
+ proto.addMonths = function (dateObj, months) {
274
275
  var d = new Date(dateObj.getTime());
275
276
 
276
277
  d.setMonth(d.getMonth() + months);
@@ -283,7 +284,7 @@ date.addMonths = function (dateObj, months) {
283
284
  * @param {number} days - number of days to add
284
285
  * @returns {Date} a date after adding the value
285
286
  */
286
- date.addDays = function (dateObj, days) {
287
+ proto.addDays = function (dateObj, days) {
287
288
  var d = new Date(dateObj.getTime());
288
289
 
289
290
  d.setDate(d.getDate() + days);
@@ -296,8 +297,8 @@ date.addDays = function (dateObj, days) {
296
297
  * @param {number} hours - number of hours to add
297
298
  * @returns {Date} a date after adding the value
298
299
  */
299
- date.addHours = function (dateObj, hours) {
300
- return date.addMinutes(dateObj, hours * 60);
300
+ proto.addHours = function (dateObj, hours) {
301
+ return (this || date).addMinutes(dateObj, hours * 60);
301
302
  };
302
303
 
303
304
  /**
@@ -306,8 +307,8 @@ date.addHours = function (dateObj, hours) {
306
307
  * @param {number} minutes - number of minutes to add
307
308
  * @returns {Date} a date after adding the value
308
309
  */
309
- date.addMinutes = function (dateObj, minutes) {
310
- return date.addSeconds(dateObj, minutes * 60);
310
+ proto.addMinutes = function (dateObj, minutes) {
311
+ return (this || date).addSeconds(dateObj, minutes * 60);
311
312
  };
312
313
 
313
314
  /**
@@ -316,8 +317,8 @@ date.addMinutes = function (dateObj, minutes) {
316
317
  * @param {number} seconds - number of seconds to add
317
318
  * @returns {Date} a date after adding the value
318
319
  */
319
- date.addSeconds = function (dateObj, seconds) {
320
- return date.addMilliseconds(dateObj, seconds * 1000);
320
+ proto.addSeconds = function (dateObj, seconds) {
321
+ return (this || date).addMilliseconds(dateObj, seconds * 1000);
321
322
  };
322
323
 
323
324
  /**
@@ -326,7 +327,7 @@ date.addSeconds = function (dateObj, seconds) {
326
327
  * @param {number} milliseconds - number of milliseconds to add
327
328
  * @returns {Date} a date after adding the value
328
329
  */
329
- date.addMilliseconds = function (dateObj, milliseconds) {
330
+ proto.addMilliseconds = function (dateObj, milliseconds) {
330
331
  return new Date(dateObj.getTime() + milliseconds);
331
332
  };
332
333
 
@@ -336,7 +337,7 @@ date.addMilliseconds = function (dateObj, milliseconds) {
336
337
  * @param {Date} date2 - a Date object
337
338
  * @returns {Object} a result object subtracting date2 from date1
338
339
  */
339
- date.subtract = function (date1, date2) {
340
+ proto.subtract = function (date1, date2) {
340
341
  var delta = date1.getTime() - date2.getTime();
341
342
 
342
343
  return {
@@ -363,7 +364,7 @@ date.subtract = function (date1, date2) {
363
364
  * @param {number} y - year
364
365
  * @returns {boolean} whether year is leap year
365
366
  */
366
- date.isLeapYear = function (y) {
367
+ proto.isLeapYear = function (y) {
367
368
  return (!(y % 4) && !!(y % 100)) || !(y % 400);
368
369
  };
369
370
 
@@ -373,22 +374,62 @@ date.isLeapYear = function (y) {
373
374
  * @param {Date} date2 - a Date object
374
375
  * @returns {boolean} whether the two dates are the same day (time is ignored)
375
376
  */
376
- date.isSameDay = function (date1, date2) {
377
+ proto.isSameDay = function (date1, date2) {
377
378
  return date1.toDateString() === date2.toDateString();
378
379
  };
379
380
 
380
381
  /**
381
- * Changing the locale or defining new locales
382
- * @param {Function|string} [code] - locale installer | language code
383
- * @param {Object} [locale] - locale definition
382
+ * Defining new locale
383
+ * @param {string} code - language code
384
+ * @param {Function} locale - locale installer
385
+ * @returns {string} current language code
386
+ */
387
+ proto.locale = function (code, locale) {
388
+ if (!locales[code]) {
389
+ locales[code] = locale;
390
+ }
391
+ };
392
+
393
+ /**
394
+ * Defining new plugin
395
+ * @param {string} name - plugin name
396
+ * @param {Function} plugin - plugin installer
397
+ * @returns {void}
398
+ */
399
+ proto.plugin = function (name, plugin) {
400
+ if (!plugins[name]) {
401
+ plugins[name] = plugin;
402
+ }
403
+ };
404
+
405
+ localized_proto = extend(proto);
406
+ date = extend(proto);
407
+
408
+ /**
409
+ * Changing locale
410
+ * @param {Function|string} [locale] - locale object | language code
384
411
  * @returns {string} current language code
385
412
  */
386
- date.locale = function (code, locale) {
387
- if (locale) {
388
- customize(code, { res: _res, formatter: _formatter, parser: _parser }, locale);
389
- } else {
390
- lang = (typeof code === 'function' ? code : date.locale[code] || function () {})(date) || lang;
413
+ date.locale = function (locale) {
414
+ var install = typeof locale === 'function' ? locale : date.locale[locale];
415
+
416
+ if (!install) {
417
+ return lang;
418
+ }
419
+ lang = install(proto);
420
+
421
+ var extension = locales[lang] || {};
422
+ var res = extend(_res, extension.res, true);
423
+ var formatter = extend(_formatter, extension.formatter, true, res);
424
+ var parser = extend(_parser, extension.parser, true, res);
425
+
426
+ date._formatter = localized_proto._formatter = formatter;
427
+ date._parser = localized_proto._parser = parser;
428
+
429
+ for (var plugin in plugins) {
430
+ date.extend(plugins[plugin]);
391
431
  }
432
+
392
433
  return lang;
393
434
  };
394
435
 
@@ -398,35 +439,32 @@ date.locale = function (code, locale) {
398
439
  * @returns {void}
399
440
  */
400
441
  date.extend = function (extension) {
442
+ var res = extend(date._parser.res, extension.res);
401
443
  var extender = extension.extender || {};
402
444
 
445
+ date._formatter = extend(date._formatter, extension.formatter, false, res);
446
+ date._parser = extend(date._parser, extension.parser, false, res);
447
+
403
448
  for (var key in extender) {
404
449
  if (!date[key]) {
405
450
  date[key] = extender[key];
406
451
  }
407
452
  }
408
- if (extension.formatter || extension.parser || extension.res) {
409
- customize(lang, locales[lang], extension);
410
- }
411
453
  };
412
454
 
413
455
  /**
414
- * Importing or defining plugins
415
- * @param {Function|string} name - plugin installer | plugin name
416
- * @param {Object} [plugin] - plugin object
456
+ * Importing plugin
457
+ * @param {Function|string} plugin - plugin object | plugin name
417
458
  * @returns {void}
418
459
  */
419
- date.plugin = function (name, plugin) {
420
- if (plugin) {
421
- if (!plugins[name]) {
422
- date.extend((plugins[name] = plugin));
423
- }
424
- } else {
425
- (typeof name === 'function' ? name : date.plugin[name] || function () {})(date);
460
+ date.plugin = function (plugin) {
461
+ var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
462
+
463
+ if (install) {
464
+ date.extend(plugins[install(proto, localized_proto)] || {});
426
465
  }
427
466
  };
428
467
 
429
- // Create default locale (English)
430
- date.locale(lang, {});
468
+ var date$1 = date;
431
469
 
432
- export default date;
470
+ export { date$1 as default };
@@ -1,17 +1,18 @@
1
1
  /*
2
2
  date-and-time (c) KNOWLEDGECODE | MIT
3
3
  */
4
- var d={},l={},m={},p="en",q={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(" "),ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["AM","PM"]},r={YYYY:function(a){return("000"+a.getFullYear()).slice(-4)},YY:function(a){return("0"+a.getFullYear()).slice(-2)},Y:function(a){return""+
4
+ var e={},f={},m="en",n={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(" "),ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["AM","PM"]},q={YYYY:function(a){return("000"+a.getFullYear()).slice(-4)},YY:function(a){return("0"+a.getFullYear()).slice(-2)},Y:function(a){return""+
5
5
  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)},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)},
6
6
  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)},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()]},
7
- dd:function(a){return this.res.dd[a.getDay()]},Z:function(a){a=a.utc?0:a.getTimezoneOffset()/.6;return(0<a?"-":"+")+("000"+Math.abs(a-a%100*.4)).slice(-4)},post:function(a){return a}},t={YYYY:function(a){return this.exec(/^\d{4}/,a)},Y:function(a){return this.exec(/^\d{1,4}/,a)},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/,
8
- 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?/,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=
9
- 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,b){a=(a.exec(b)||[""])[0];return{value:a|0,length:a.length}},find:function(a,b){for(var c=-1,e=0,f=0,h=a.length,g;f<h;f++)g=a[f],!b.indexOf(g)&&g.length>e&&(c=f,e=g.length);return{value:c,length:e}},pre:function(a){return a}};
10
- function u(a,b,c){function e(a,b,c){function e(a){a&&(this.res=a)}e.prototype=a;e.prototype.constructor=e;a=new e(c);for(var f in b||{})c=b[f],a[f]=c.slice?c.slice():c;return a}var f={res:e(b.res,c.res)};f.formatter=e(b.formatter,c.formatter,f.res);f.parser=e(b.parser,c.parser,f.res);l[a]=f}d.compile=function(a){for(var b=/\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g,c,e=[a];c=b.exec(a);)e[e.length]=c[0];return e};
11
- d.format=function(a,b,c){b="string"===typeof b?d.compile(b):b;a=d.addMinutes(a,c?a.getTimezoneOffset():0);var e=l[p].formatter,f="";a.utc=c||!1;c=1;for(var h=b.length,g;c<h;c++)g=b[c],f+=e[g]?e.post(e[g](a,b[0])):g.replace(/\[(.*)]/,"$1");return f};
12
- d.preparse=function(a,b){b="string"===typeof b?d.compile(b):b;var c={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},e=/\[(.*)]/,f=l[p].parser,h=0;a=f.pre(a);for(var g=1,v=b.length,k,n;g<v;g++)if(k=b[g],f[k]){n=f[k](a.slice(h),b[0]);if(!n.length)break;h+=n.length;c[k.charAt(0)]=n.value;c._match++}else if(k===a.charAt(h)||" "===k)h++;else if(e.test(k)&&!a.slice(h).indexOf(e.exec(k)[1]))h+=k.length-2;else{"..."===k&&(h=a.length);break}c.H=c.H||f.h12(c.h,c.A);c._index=h;c._length=
13
- a.length;return c};d.isValid=function(a,b){a="string"===typeof a?d.preparse(a,b):a;b=[31,28+d.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>b||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
- d.parse=function(a,b,c){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,a.M,a.D,a.H,a.m,a.s,a.S)):new Date(NaN)};d.transform=function(a,b,c,e){return d.format(d.parse(a,b),c,e)};d.addYears=function(a,b){return d.addMonths(a,12*b)};d.addMonths=function(a,b){a=new Date(a.getTime());a.setMonth(a.getMonth()+b);return a};d.addDays=function(a,b){a=new Date(a.getTime());a.setDate(a.getDate()+b);return a};
15
- d.addHours=function(a,b){return d.addMinutes(a,60*b)};d.addMinutes=function(a,b){return d.addSeconds(a,60*b)};d.addSeconds=function(a,b){return d.addMilliseconds(a,1E3*b)};d.addMilliseconds=function(a,b){return new Date(a.getTime()+b)};d.subtract=function(a,b){var c=a.getTime()-b.getTime();return{toMilliseconds:function(){return c},toSeconds:function(){return c/1E3},toMinutes:function(){return c/6E4},toHours:function(){return c/36E5},toDays:function(){return c/864E5}}};
16
- d.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};d.isSameDay=function(a,b){return a.toDateString()===b.toDateString()};d.locale=function(a,b){b?u(a,{res:q,formatter:r,parser:t},b):p=("function"===typeof a?a:d.locale[a]||function(){})(d)||p;return p};d.extend=function(a){var b=a.extender||{},c;for(c in b)d[c]||(d[c]=b[c]);(a.formatter||a.parser||a.res)&&u(p,l[p],a)};d.plugin=function(a,b){b?m[a]||d.extend(m[a]=b):("function"===typeof a?a:d.plugin[a]||function(){})(d)};d.locale(p,{});
17
- export default d
7
+ 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:n},r={YYYY:function(a){return this.exec(/^\d{4}/,a)},Y:function(a){return this.exec(/^\d{1,4}/,a)},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)},
8
+ 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?/,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}/,
9
+ 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,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},
10
+ res:n};function t(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}var u={_formatter:q,_parser:r},w,x;u.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
+ u.format=function(a,b,c){var d=this||x;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,v=b.length,k;l<v;l++)k=b[l],g+=d[k]?d.post(d[k](a,b[0])):k.replace(/\[(.*)]/,"$1");return g};
12
+ u.preparse=function(a,b){var c=this||x;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=1,v=b.length,k,p;l<v;l++)if(k=b[l],c[k]){p=c[k](a.slice(g),b[0]);if(!p.length)break;g+=p.length;d[p.token||k.charAt(0)]=p.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,
13
+ d.A);d._index=g;d._length=a.length;return d};u.parse=function(a,b,c){var d=this||x;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,a.M,a.D,a.H,a.m,a.s,a.S)):new Date(NaN)};
14
+ u.isValid=function(a,b){var c=this||x;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)};u.transform=function(a,b,c,d){let h=this||x;return h.format(h.parse(a,b),c,d)};u.addYears=function(a,b){return(this||x).addMonths(a,12*b)};
15
+ u.addMonths=function(a,b){a=new Date(a.getTime());a.setMonth(a.getMonth()+b);return a};u.addDays=function(a,b){a=new Date(a.getTime());a.setDate(a.getDate()+b);return a};u.addHours=function(a,b){return(this||x).addMinutes(a,60*b)};u.addMinutes=function(a,b){return(this||x).addSeconds(a,60*b)};u.addSeconds=function(a,b){return(this||x).addMilliseconds(a,1E3*b)};u.addMilliseconds=function(a,b){return new Date(a.getTime()+b)};
16
+ u.subtract=function(a,b){var c=a.getTime()-b.getTime();return{toMilliseconds:function(){return c},toSeconds:function(){return c/1E3},toMinutes:function(){return c/6E4},toHours:function(){return c/36E5},toDays:function(){return c/864E5}}};u.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};u.isSameDay=function(a,b){return a.toDateString()===b.toDateString()};u.locale=function(a,b){e[a]||(e[a]=b)};u.plugin=function(a,b){f[a]||(f[a]=b)};w=t(u);x=t(u);
17
+ x.locale=function(a){a="function"===typeof a?a:x.locale[a];if(!a)return m;m=a(u);var b=e[m]||{},c=t(n,b.res,!0);a=t(q,b.formatter,!0,c);b=t(r,b.parser,!0,c);x._formatter=w._formatter=a;x._parser=w._parser=b;for(var d in f)x.extend(f[d]);return m};x.extend=function(a){var b=t(x._parser.res,a.res),c=a.extender||{};x._formatter=t(x._formatter,a.formatter,!1,b);x._parser=t(x._parser,a.parser,!1,b);for(var d in c)x[d]||(x[d]=c[d])};
18
+ x.plugin=function(a){(a="function"===typeof a?a:x.plugin[a])&&x.extend(f[a(u,w)]||{})};export default x