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
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 date = {},
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.utc ? 0 : d.getTimezoneOffset() / 0.6;
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
- customize = function (code, base, locale) {
116
- var extend = function (proto, props, res) {
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
- Locale.prototype = proto;
122
- Locale.prototype.constructor = Locale;
123
-
124
- var newLocale = new Locale(res),
125
- value;
126
-
127
- for (var key in props || {}) {
128
- value = props[key];
129
- newLocale[key] = value.slice ? value.slice() : value;
130
- }
131
- return newLocale;
132
- },
133
- loc = { res: extend(base.res, locale.res) };
134
-
135
- loc.formatter = extend(base.formatter, locale.formatter, loc.res);
136
- loc.parser = extend(base.parser, locale.parser, loc.res);
137
- locales[code] = loc;
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
- date.compile = function (formatString) {
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
- date.format = function (dateObj, arg, utc) {
162
- var pattern = typeof arg === 'string' ? date.compile(arg) : arg,
163
- d = date.addMinutes(dateObj, utc ? dateObj.getTimezoneOffset() : 0),
164
- formatter = locales[lang].formatter, str = '';
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.utc = utc || false;
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
- date.preparse = function (dateString, arg) {
181
- var pattern = typeof arg === 'string' ? date.compile(arg) : arg,
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 = locales[lang].parser, offset = 0;
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
- date.parse = function (dateString, arg, utc) {
239
- var dt = date.preparse(dateString, arg);
220
+ proto.parse = function (dateString, arg, utc) {
221
+ var ctx = this || date, dt = ctx.preparse(dateString, arg);
240
222
 
241
- if (date.isValid(dt)) {
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
- date.transform = function (dateString, arg1, arg2, utc) {
260
- return date.format(date.parse(dateString, arg1), arg2, utc);
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
- date.addYears = function (dateObj, years) {
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
- date.addMonths = function (dateObj, months) {
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
- date.addDays = function (dateObj, days) {
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
- date.addHours = function (dateObj, hours) {
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
- date.addMinutes = function (dateObj, minutes) {
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
- date.addSeconds = function (dateObj, seconds) {
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
- date.addMilliseconds = function (dateObj, milliseconds) {
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
- date.subtract = function (date1, date2) {
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
- date.isLeapYear = function (y) {
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
- date.isSameDay = function (date1, date2) {
383
+ proto.isSameDay = function (date1, date2) {
383
384
  return date1.toDateString() === date2.toDateString();
384
385
  };
385
386
 
386
387
  /**
387
- * Changing the locale or defining new locales
388
- * @param {Function|string} [code] - locale installer | language code
389
- * @param {Object} [locale] - locale definition
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 (code, locale) {
393
- if (locale) {
394
- customize(code, { res: _res, formatter: _formatter, parser: _parser }, locale);
395
- } else {
396
- lang = (typeof code === 'function' ? code : date.locale[code] || function () {})(date) || lang;
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 or defining plugins
421
- * @param {Function|string} name - plugin installer | plugin name
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 (name, plugin) {
426
- if (plugin) {
427
- if (!plugins[name]) {
428
- date.extend((plugins[name] = plugin));
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
- // Create default locale (English)
436
- date.locale(lang, {});
474
+ var date$1 = date;
437
475
 
438
- return date;
476
+ return date$1;
439
477
 
440
- })));
478
+ }));
@@ -1,16 +1,16 @@
1
1
  /*
2
2
  date-and-time (c) KNOWLEDGECODE | MIT
3
3
  */
4
- 'use strict';(function(b,l){"object"===typeof exports&&"undefined"!==typeof module?module.exports=l():"function"===typeof define&&define.amd?define(l):(b="undefined"!==typeof globalThis?globalThis:b||self,b.date=l())})(this,function(){var b={},l={},n={},m="en",r={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"]},t={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)},
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.utc?0:a.getTimezoneOffset()/.6;return(0<a?"-":"+")+("000"+Math.abs(a-a%100*.4)).slice(-4)},post:function(a){return a}},u={YYYY:function(a){return this.exec(/^\d{4}/,a)},Y:function(a){return this.exec(/^\d{1,4}/,a)},MMMM:function(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,c){return(12===a?0:a)+12*c},exec:function(a,
10
- c){a=(a.exec(c)||[""])[0];return{value:a|0,length:a.length}},find:function(a,c){for(var b=-1,f=0,e=0,h=a.length,g;e<h;e++)g=a[e],!c.indexOf(g)&&g.length>f&&(b=e,f=g.length);return{value:b,length:f}},pre:function(a){return a}},q=function(a,c,b){var d=function(a,c,b){var d=function(a){a&&(this.res=a)};d.prototype=a;d.prototype.constructor=d;a=new d(b);for(var e in c||{})b=c[e],a[e]=b.slice?b.slice():b;return a},e={res:d(c.res,b.res)};e.formatter=d(c.formatter,b.formatter,e.res);e.parser=d(c.parser,
11
- b.parser,e.res);l[a]=e};b.compile=function(a){for(var c=/\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g,b,f=[a];b=c.exec(a);)f[f.length]=b[0];return f};b.format=function(a,c,d){c="string"===typeof c?b.compile(c):c;a=b.addMinutes(a,d?a.getTimezoneOffset():0);var f=l[m].formatter,e="";a.utc=d||!1;d=1;for(var h=c.length,g;d<h;d++)g=c[d],e+=f[g]?f.post(f[g](a,c[0])):g.replace(/\[(.*)]/,"$1");return e};b.preparse=function(a,c){c="string"===typeof c?b.compile(c):c;var d={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,
12
- s:0,S:0,Z:0,_index:0,_length:0,_match:0},f=/\[(.*)]/,e=l[m].parser,h=0;a=e.pre(a);for(var g=1,n=c.length,k,p;g<n;g++)if(k=c[g],e[k]){p=e[k](a.slice(h),c[0]);if(!p.length)break;h+=p.length;d[k.charAt(0)]=p.value;d._match++}else if(k===a.charAt(h)||" "===k)h++;else if(f.test(k)&&!a.slice(h).indexOf(f.exec(k)[1]))h+=k.length-2;else{"..."===k&&(h=a.length);break}d.H=d.H||e.h12(d.h,d.A);d._index=h;d._length=a.length;return d};b.isValid=function(a,c){a="string"===typeof a?b.preparse(a,c):a;c=[31,28+b.isLeapYear(a.Y)|
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)};b.parse=function(a,c,d){a=b.preparse(a,c);return b.isValid(a)?(a.M-=100>a.Y?22801:1,d||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)};b.transform=function(a,c,d,f){return b.format(b.parse(a,c),d,f)};b.addYears=
14
- function(a,c){return b.addMonths(a,12*c)};b.addMonths=function(a,c){a=new Date(a.getTime());a.setMonth(a.getMonth()+c);return a};b.addDays=function(a,c){a=new Date(a.getTime());a.setDate(a.getDate()+c);return a};b.addHours=function(a,c){return b.addMinutes(a,60*c)};b.addMinutes=function(a,c){return b.addSeconds(a,60*c)};b.addSeconds=function(a,c){return b.addMilliseconds(a,1E3*c)};b.addMilliseconds=function(a,c){return new Date(a.getTime()+c)};b.subtract=function(a,c){var b=a.getTime()-c.getTime();
15
- return{toMilliseconds:function(){return b},toSeconds:function(){return b/1E3},toMinutes:function(){return b/6E4},toHours:function(){return b/36E5},toDays:function(){return b/864E5}}};b.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};b.isSameDay=function(a,b){return a.toDateString()===b.toDateString()};b.locale=function(a,c){c?q(a,{res:r,formatter:t,parser:u},c):m=("function"===typeof a?a:b.locale[a]||function(){})(b)||m;return m};b.extend=function(a){var c=a.extender||{},d;for(d in c)b[d]||
16
- (b[d]=c[d]);(a.formatter||a.parser||a.res)&&q(m,l[m],a)};b.plugin=function(a,c){c?n[a]||b.extend(n[a]=c):("function"===typeof a?a:b.plugin[a]||function(){})(b)};b.locale(m,{});return 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})