date-and-time 0.14.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EXTEND.md +29 -11
- package/LOCALE.md +19 -34
- package/PLUGINS.md +222 -113
- package/README.md +203 -171
- package/date-and-time.js +171 -147
- package/date-and-time.min.js +14 -14
- package/esm/date-and-time.es.js +466 -0
- package/esm/date-and-time.es.min.js +17 -0
- package/esm/date-and-time.mjs +466 -0
- package/esm/locale/ar.es.js +39 -0
- package/esm/locale/ar.mjs +39 -0
- package/esm/locale/az.es.js +44 -0
- package/esm/locale/az.mjs +44 -0
- package/esm/locale/bn.es.js +50 -0
- package/esm/locale/bn.mjs +50 -0
- package/esm/locale/cs.es.js +22 -0
- package/esm/locale/cs.mjs +22 -0
- package/esm/locale/de.es.js +23 -0
- package/esm/locale/de.mjs +23 -0
- package/esm/locale/dk.es.js +22 -0
- package/esm/locale/dk.mjs +22 -0
- package/esm/locale/el.es.js +44 -0
- package/esm/locale/el.mjs +44 -0
- package/esm/locale/en.es.js +13 -0
- package/esm/locale/en.mjs +13 -0
- package/esm/locale/es.es.js +42 -0
- package/esm/locale/es.mjs +42 -0
- package/esm/locale/fa.es.js +39 -0
- package/esm/locale/fa.mjs +39 -0
- package/esm/locale/fr.es.js +23 -0
- package/esm/locale/fr.mjs +23 -0
- package/esm/locale/hi.es.js +50 -0
- package/esm/locale/hi.mjs +50 -0
- package/esm/locale/hu.es.js +23 -0
- package/esm/locale/hu.mjs +23 -0
- package/esm/locale/id.es.js +46 -0
- package/esm/locale/id.mjs +46 -0
- package/esm/locale/it.es.js +23 -0
- package/esm/locale/it.mjs +23 -0
- package/esm/locale/ja.es.js +31 -0
- package/esm/locale/ja.mjs +31 -0
- package/esm/locale/jv.es.js +46 -0
- package/esm/locale/jv.mjs +46 -0
- package/esm/locale/ko.es.js +23 -0
- package/esm/locale/ko.mjs +23 -0
- package/esm/locale/my.es.js +38 -0
- package/esm/locale/my.mjs +38 -0
- package/esm/locale/nl.es.js +37 -0
- package/esm/locale/nl.mjs +37 -0
- package/esm/locale/pa-in.es.js +62 -0
- package/esm/locale/pa-in.mjs +62 -0
- package/esm/locale/pl.es.js +37 -0
- package/esm/locale/pl.mjs +37 -0
- package/esm/locale/pt.es.js +44 -0
- package/esm/locale/pt.mjs +44 -0
- package/esm/locale/ro.es.js +22 -0
- package/esm/locale/ro.mjs +22 -0
- package/esm/locale/ru.es.js +44 -0
- package/esm/locale/ru.mjs +44 -0
- package/esm/locale/rw.es.js +22 -0
- package/esm/locale/rw.mjs +22 -0
- package/esm/locale/sr.es.js +22 -0
- package/esm/locale/sr.mjs +22 -0
- package/esm/locale/th.es.js +23 -0
- package/esm/locale/th.mjs +23 -0
- package/esm/locale/tr.es.js +22 -0
- package/esm/locale/tr.mjs +22 -0
- package/esm/locale/uk.es.js +57 -0
- package/esm/locale/uk.mjs +57 -0
- package/esm/locale/uz.es.js +22 -0
- package/esm/locale/uz.mjs +22 -0
- package/esm/locale/vi.es.js +23 -0
- package/esm/locale/vi.mjs +23 -0
- package/esm/locale/zh-cn.es.js +48 -0
- package/esm/locale/zh-cn.mjs +48 -0
- package/esm/locale/zh-tw.es.js +46 -0
- package/esm/locale/zh-tw.mjs +46 -0
- package/esm/plugin/day-of-week.es.js +19 -0
- package/esm/plugin/day-of-week.mjs +19 -0
- package/esm/plugin/meridiem.es.js +47 -0
- package/esm/plugin/meridiem.mjs +47 -0
- package/esm/plugin/microsecond.es.js +31 -0
- package/esm/plugin/microsecond.mjs +31 -0
- package/esm/plugin/ordinal.es.js +34 -0
- package/esm/plugin/ordinal.mjs +34 -0
- package/esm/plugin/timespan.es.js +75 -0
- package/esm/plugin/timespan.mjs +75 -0
- package/esm/plugin/timezone.es.js +73 -0
- package/esm/plugin/timezone.mjs +73 -0
- package/esm/plugin/two-digit-year.es.js +21 -0
- package/esm/plugin/two-digit-year.mjs +21 -0
- package/locale/ar.js +14 -19
- package/locale/az.js +14 -19
- package/locale/bn.js +14 -19
- package/locale/cs.js +14 -19
- package/locale/de.js +15 -20
- package/locale/dk.js +15 -20
- package/locale/el.js +21 -24
- package/locale/en.js +17 -19
- package/locale/es.js +14 -19
- package/locale/fa.js +14 -19
- package/locale/fr.js +14 -19
- package/locale/hi.js +14 -19
- package/locale/hu.js +14 -19
- package/locale/id.js +14 -19
- package/locale/it.js +14 -19
- package/locale/ja.js +14 -19
- package/locale/jv.js +14 -19
- package/locale/ko.js +14 -19
- package/locale/my.js +14 -19
- package/locale/nl.js +20 -23
- package/locale/pa-in.js +14 -19
- package/locale/pl.js +20 -23
- package/locale/pt.js +14 -19
- package/locale/ro.js +15 -20
- package/locale/ru.js +14 -19
- package/locale/rw.js +30 -0
- package/locale/sr.js +14 -19
- package/locale/th.js +14 -19
- package/locale/tr.js +14 -19
- package/locale/uk.js +23 -26
- package/locale/uz.js +14 -19
- package/locale/vi.js +14 -19
- package/locale/zh-cn.js +14 -19
- package/locale/zh-tw.js +14 -19
- package/package.json +26 -11
- package/plugin/day-of-week.js +13 -14
- package/plugin/meridiem.js +32 -24
- package/plugin/microsecond.js +14 -15
- package/plugin/ordinal.js +13 -14
- package/plugin/timespan.js +13 -14
- package/plugin/timezone.js +81 -0
- package/plugin/two-digit-year.js +13 -19
package/date-and-time.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.date = factory());
|
|
5
|
+
})(this, (function () { 'use strict';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @preserve date-and-time (c) KNOWLEDGECODE | MIT
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
var locales = {},
|
|
9
12
|
plugins = {},
|
|
10
13
|
lang = 'en',
|
|
11
14
|
_res = {
|
|
@@ -41,8 +44,12 @@
|
|
|
41
44
|
dddd: function (d/*, formatString*/) { return this.res.dddd[d.getDay()]; },
|
|
42
45
|
ddd: function (d/*, formatString*/) { return this.res.ddd[d.getDay()]; },
|
|
43
46
|
dd: function (d/*, formatString*/) { return this.res.dd[d.getDay()]; },
|
|
44
|
-
Z: function (d/*, formatString*/) {
|
|
45
|
-
|
|
47
|
+
Z: function (d/*, formatString*/) {
|
|
48
|
+
var offset = d.getTimezoneOffset() / 0.6 | 0;
|
|
49
|
+
return (offset > 0 ? '-' : '+') + ('000' + Math.abs(offset - (offset % 100 * 0.4 | 0))).slice(-4);
|
|
50
|
+
},
|
|
51
|
+
post: function (str) { return str; },
|
|
52
|
+
res: _res
|
|
46
53
|
},
|
|
47
54
|
_parser = {
|
|
48
55
|
YYYY: function (str/*, formatString */) { return this.exec(/^\d{4}/, str); },
|
|
@@ -103,39 +110,37 @@
|
|
|
103
110
|
}
|
|
104
111
|
return { value: index, length: length };
|
|
105
112
|
},
|
|
106
|
-
pre: function (str) { return str; }
|
|
113
|
+
pre: function (str) { return str; },
|
|
114
|
+
res: _res
|
|
107
115
|
},
|
|
108
|
-
|
|
109
|
-
var
|
|
110
|
-
var Locale = function (r) {
|
|
111
|
-
if (r) { this.res = r; }
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
Locale.prototype = proto;
|
|
115
|
-
Locale.prototype.constructor = Locale;
|
|
116
|
-
|
|
117
|
-
var newLocale = new Locale(res),
|
|
118
|
-
value;
|
|
119
|
-
|
|
120
|
-
for (var key in props || {}) {
|
|
121
|
-
value = props[key];
|
|
122
|
-
newLocale[key] = value.slice ? value.slice() : value;
|
|
123
|
-
}
|
|
124
|
-
return newLocale;
|
|
125
|
-
},
|
|
126
|
-
loc = { res: extend(base.res, locale.res) };
|
|
116
|
+
extend = function (base, props, override, res) {
|
|
117
|
+
var obj = {}, key;
|
|
127
118
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
131
|
};
|
|
132
132
|
|
|
133
|
+
var proto = {
|
|
134
|
+
_formatter: _formatter,
|
|
135
|
+
_parser: _parser
|
|
136
|
+
};
|
|
137
|
+
|
|
133
138
|
/**
|
|
134
|
-
*
|
|
139
|
+
* Compiling a format string
|
|
135
140
|
* @param {string} formatString - a format string
|
|
136
141
|
* @returns {Array.<string>} a compiled object
|
|
137
142
|
*/
|
|
138
|
-
|
|
143
|
+
proto.compile = function (formatString) {
|
|
139
144
|
var re = /\[([^\[\]]|\[[^\[\]]*])*]|([A-Za-z])\2+|\.{3}|./g, keys, pattern = [formatString];
|
|
140
145
|
|
|
141
146
|
while ((keys = re.exec(formatString))) {
|
|
@@ -145,18 +150,19 @@
|
|
|
145
150
|
};
|
|
146
151
|
|
|
147
152
|
/**
|
|
148
|
-
*
|
|
153
|
+
* Formatting a Date and Time
|
|
149
154
|
* @param {Date} dateObj - a Date object
|
|
150
|
-
* @param {string|Array.<string>} arg - a format string or
|
|
155
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
151
156
|
* @param {boolean} [utc] - output as UTC
|
|
152
157
|
* @returns {string} a formatted string
|
|
153
158
|
*/
|
|
154
|
-
|
|
155
|
-
var pattern = typeof arg === 'string' ?
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
proto.format = function (dateObj, arg, utc) {
|
|
160
|
+
var pattern = typeof arg === 'string' ? this.compile(arg) : arg,
|
|
161
|
+
offset = dateObj.getTimezoneOffset(),
|
|
162
|
+
d = this.addMinutes(dateObj, utc ? offset : 0),
|
|
163
|
+
formatter = this._formatter, str = '';
|
|
158
164
|
|
|
159
|
-
d.
|
|
165
|
+
d.getTimezoneOffset = function () { return utc ? 0 : offset; };
|
|
160
166
|
for (var i = 1, len = pattern.length, token; i < len; i++) {
|
|
161
167
|
token = pattern[i];
|
|
162
168
|
str += formatter[token] ? formatter.post(formatter[token](d, pattern[0])) : token.replace(/\[(.*)]/, '$1');
|
|
@@ -165,15 +171,15 @@
|
|
|
165
171
|
};
|
|
166
172
|
|
|
167
173
|
/**
|
|
168
|
-
*
|
|
174
|
+
* Pre-parsing a Date and Time string
|
|
169
175
|
* @param {string} dateString - a date string
|
|
170
|
-
* @param {string|Array.<string>} arg - a format string or
|
|
176
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
171
177
|
* @returns {Object} a date structure
|
|
172
178
|
*/
|
|
173
|
-
|
|
174
|
-
var pattern = typeof arg === 'string' ?
|
|
179
|
+
proto.preparse = function (dateString, arg) {
|
|
180
|
+
var pattern = typeof arg === 'string' ? this.compile(arg) : arg,
|
|
175
181
|
dt = { Y: 1970, M: 1, D: 1, H: 0, A: 0, h: 0, m: 0, s: 0, S: 0, Z: 0, _index: 0, _length: 0, _match: 0 },
|
|
176
|
-
comment = /\[(.*)]/, parser =
|
|
182
|
+
comment = /\[(.*)]/, parser = this._parser, offset = 0;
|
|
177
183
|
|
|
178
184
|
dateString = parser.pre(dateString);
|
|
179
185
|
for (var i = 1, len = pattern.length, token, result; i < len; i++) {
|
|
@@ -184,7 +190,7 @@
|
|
|
184
190
|
break;
|
|
185
191
|
}
|
|
186
192
|
offset += result.length;
|
|
187
|
-
dt[token.charAt(0)] = result.value;
|
|
193
|
+
dt[result.token || token.charAt(0)] = result.value;
|
|
188
194
|
dt._match++;
|
|
189
195
|
} else if (token === dateString.charAt(offset) || token === ' ') {
|
|
190
196
|
offset++;
|
|
@@ -204,34 +210,16 @@
|
|
|
204
210
|
};
|
|
205
211
|
|
|
206
212
|
/**
|
|
207
|
-
*
|
|
208
|
-
* @param {Object|string} arg1 - a date structure or a date string
|
|
209
|
-
* @param {string|Array.<string>} [arg2] - a format string or a compiled object
|
|
210
|
-
* @returns {boolean} whether the date string is a valid date
|
|
211
|
-
*/
|
|
212
|
-
date.isValid = function (arg1, arg2) {
|
|
213
|
-
var dt = typeof arg1 === 'string' ? date.preparse(arg1, arg2) : arg1,
|
|
214
|
-
last = [31, 28 + date.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
|
|
215
|
-
|
|
216
|
-
return !(
|
|
217
|
-
dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
|
|
218
|
-
dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
|
|
219
|
-
dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
|
|
220
|
-
dt.Z < -720 || dt.Z > 840
|
|
221
|
-
);
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* parsing a date string
|
|
213
|
+
* Parsing a Date and Time string
|
|
226
214
|
* @param {string} dateString - a date string
|
|
227
|
-
* @param {string|Array.<string>} arg - a format string or
|
|
215
|
+
* @param {string|Array.<string>} arg - a format string or its compiled object
|
|
228
216
|
* @param {boolean} [utc] - input as UTC
|
|
229
217
|
* @returns {Date} a constructed date
|
|
230
218
|
*/
|
|
231
|
-
|
|
232
|
-
var dt =
|
|
219
|
+
proto.parse = function (dateString, arg, utc) {
|
|
220
|
+
var dt = this.preparse(dateString, arg);
|
|
233
221
|
|
|
234
|
-
if (
|
|
222
|
+
if (this.isValid(dt)) {
|
|
235
223
|
dt.M -= dt.Y < 100 ? 22801 : 1; // 22801 = 1900 * 12 + 1
|
|
236
224
|
if (utc || dt.Z) {
|
|
237
225
|
return new Date(Date.UTC(dt.Y, dt.M, dt.D, dt.H, dt.m + dt.Z, dt.s, dt.S));
|
|
@@ -242,34 +230,52 @@
|
|
|
242
230
|
};
|
|
243
231
|
|
|
244
232
|
/**
|
|
245
|
-
*
|
|
233
|
+
* Validation
|
|
234
|
+
* @param {Object|string} arg1 - a date structure or a date string
|
|
235
|
+
* @param {string|Array.<string>} [arg2] - a format string or its compiled object
|
|
236
|
+
* @returns {boolean} whether the date string is a valid date
|
|
237
|
+
*/
|
|
238
|
+
proto.isValid = function (arg1, arg2) {
|
|
239
|
+
var dt = typeof arg1 === 'string' ? this.preparse(arg1, arg2) : arg1,
|
|
240
|
+
last = [31, 28 + this.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];
|
|
241
|
+
|
|
242
|
+
return !(
|
|
243
|
+
dt._index < 1 || dt._length < 1 || dt._index - dt._length || dt._match < 1 ||
|
|
244
|
+
dt.Y < 1 || dt.Y > 9999 || dt.M < 1 || dt.M > 12 || dt.D < 1 || dt.D > last ||
|
|
245
|
+
dt.H < 0 || dt.H > 23 || dt.m < 0 || dt.m > 59 || dt.s < 0 || dt.s > 59 || dt.S < 0 || dt.S > 999 ||
|
|
246
|
+
dt.Z < -720 || dt.Z > 840
|
|
247
|
+
);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Transforming a Date and Time string
|
|
246
252
|
* @param {string} dateString - a date string
|
|
247
|
-
* @param {string|Array.<string>} arg1 -
|
|
248
|
-
* @param {string|Array.<string>} arg2 -
|
|
253
|
+
* @param {string|Array.<string>} arg1 - a format string or its compiled object
|
|
254
|
+
* @param {string|Array.<string>} arg2 - a transformed format string or its compiled object
|
|
249
255
|
* @param {boolean} [utc] - output as UTC
|
|
250
256
|
* @returns {string} a formatted string
|
|
251
257
|
*/
|
|
252
|
-
|
|
253
|
-
return
|
|
258
|
+
proto.transform = function (dateString, arg1, arg2, utc) {
|
|
259
|
+
return this.format(this.parse(dateString, arg1), arg2, utc);
|
|
254
260
|
};
|
|
255
261
|
|
|
256
262
|
/**
|
|
257
|
-
*
|
|
263
|
+
* Adding years
|
|
258
264
|
* @param {Date} dateObj - a date object
|
|
259
265
|
* @param {number} years - number of years to add
|
|
260
266
|
* @returns {Date} a date after adding the value
|
|
261
267
|
*/
|
|
262
|
-
|
|
263
|
-
return
|
|
268
|
+
proto.addYears = function (dateObj, years) {
|
|
269
|
+
return this.addMonths(dateObj, years * 12);
|
|
264
270
|
};
|
|
265
271
|
|
|
266
272
|
/**
|
|
267
|
-
*
|
|
273
|
+
* Adding months
|
|
268
274
|
* @param {Date} dateObj - a date object
|
|
269
275
|
* @param {number} months - number of months to add
|
|
270
276
|
* @returns {Date} a date after adding the value
|
|
271
277
|
*/
|
|
272
|
-
|
|
278
|
+
proto.addMonths = function (dateObj, months) {
|
|
273
279
|
var d = new Date(dateObj.getTime());
|
|
274
280
|
|
|
275
281
|
d.setMonth(d.getMonth() + months);
|
|
@@ -277,12 +283,12 @@
|
|
|
277
283
|
};
|
|
278
284
|
|
|
279
285
|
/**
|
|
280
|
-
*
|
|
286
|
+
* Adding days
|
|
281
287
|
* @param {Date} dateObj - a date object
|
|
282
288
|
* @param {number} days - number of days to add
|
|
283
289
|
* @returns {Date} a date after adding the value
|
|
284
290
|
*/
|
|
285
|
-
|
|
291
|
+
proto.addDays = function (dateObj, days) {
|
|
286
292
|
var d = new Date(dateObj.getTime());
|
|
287
293
|
|
|
288
294
|
d.setDate(d.getDate() + days);
|
|
@@ -290,52 +296,52 @@
|
|
|
290
296
|
};
|
|
291
297
|
|
|
292
298
|
/**
|
|
293
|
-
*
|
|
299
|
+
* Adding hours
|
|
294
300
|
* @param {Date} dateObj - a date object
|
|
295
301
|
* @param {number} hours - number of hours to add
|
|
296
302
|
* @returns {Date} a date after adding the value
|
|
297
303
|
*/
|
|
298
|
-
|
|
299
|
-
return
|
|
304
|
+
proto.addHours = function (dateObj, hours) {
|
|
305
|
+
return this.addMinutes(dateObj, hours * 60);
|
|
300
306
|
};
|
|
301
307
|
|
|
302
308
|
/**
|
|
303
|
-
*
|
|
309
|
+
* Adding minutes
|
|
304
310
|
* @param {Date} dateObj - a date object
|
|
305
311
|
* @param {number} minutes - number of minutes to add
|
|
306
312
|
* @returns {Date} a date after adding the value
|
|
307
313
|
*/
|
|
308
|
-
|
|
309
|
-
return
|
|
314
|
+
proto.addMinutes = function (dateObj, minutes) {
|
|
315
|
+
return this.addSeconds(dateObj, minutes * 60);
|
|
310
316
|
};
|
|
311
317
|
|
|
312
318
|
/**
|
|
313
|
-
*
|
|
319
|
+
* Adding seconds
|
|
314
320
|
* @param {Date} dateObj - a date object
|
|
315
321
|
* @param {number} seconds - number of seconds to add
|
|
316
322
|
* @returns {Date} a date after adding the value
|
|
317
323
|
*/
|
|
318
|
-
|
|
319
|
-
return
|
|
324
|
+
proto.addSeconds = function (dateObj, seconds) {
|
|
325
|
+
return this.addMilliseconds(dateObj, seconds * 1000);
|
|
320
326
|
};
|
|
321
327
|
|
|
322
328
|
/**
|
|
323
|
-
*
|
|
329
|
+
* Adding milliseconds
|
|
324
330
|
* @param {Date} dateObj - a date object
|
|
325
331
|
* @param {number} milliseconds - number of milliseconds to add
|
|
326
332
|
* @returns {Date} a date after adding the value
|
|
327
333
|
*/
|
|
328
|
-
|
|
334
|
+
proto.addMilliseconds = function (dateObj, milliseconds) {
|
|
329
335
|
return new Date(dateObj.getTime() + milliseconds);
|
|
330
336
|
};
|
|
331
337
|
|
|
332
338
|
/**
|
|
333
|
-
*
|
|
339
|
+
* Subtracting two dates
|
|
334
340
|
* @param {Date} date1 - a Date object
|
|
335
341
|
* @param {Date} date2 - a Date object
|
|
336
342
|
* @returns {Object} a result object subtracting date2 from date1
|
|
337
343
|
*/
|
|
338
|
-
|
|
344
|
+
proto.subtract = function (date1, date2) {
|
|
339
345
|
var delta = date1.getTime() - date2.getTime();
|
|
340
346
|
|
|
341
347
|
return {
|
|
@@ -358,93 +364,111 @@
|
|
|
358
364
|
};
|
|
359
365
|
|
|
360
366
|
/**
|
|
361
|
-
* leap year
|
|
367
|
+
* Whether year is leap year
|
|
362
368
|
* @param {number} y - year
|
|
363
|
-
* @returns {boolean} whether
|
|
369
|
+
* @returns {boolean} whether year is leap year
|
|
364
370
|
*/
|
|
365
|
-
|
|
371
|
+
proto.isLeapYear = function (y) {
|
|
366
372
|
return (!(y % 4) && !!(y % 100)) || !(y % 400);
|
|
367
373
|
};
|
|
368
374
|
|
|
369
375
|
/**
|
|
370
|
-
*
|
|
376
|
+
* Comparison of two dates
|
|
371
377
|
* @param {Date} date1 - a Date object
|
|
372
378
|
* @param {Date} date2 - a Date object
|
|
373
|
-
* @returns {boolean} whether the dates are the same day (
|
|
379
|
+
* @returns {boolean} whether the two dates are the same day (time is ignored)
|
|
374
380
|
*/
|
|
375
|
-
|
|
381
|
+
proto.isSameDay = function (date1, date2) {
|
|
376
382
|
return date1.toDateString() === date2.toDateString();
|
|
377
383
|
};
|
|
378
384
|
|
|
379
385
|
/**
|
|
380
|
-
*
|
|
381
|
-
* @param {
|
|
382
|
-
* @param {
|
|
386
|
+
* Defining new locale
|
|
387
|
+
* @param {string} code - language code
|
|
388
|
+
* @param {Function} locale - locale installer
|
|
383
389
|
* @returns {string} current language code
|
|
384
390
|
*/
|
|
385
|
-
|
|
386
|
-
if (
|
|
387
|
-
|
|
388
|
-
} else if (typeof code === 'function') {
|
|
389
|
-
lang = code(date);
|
|
390
|
-
} else if (code) {
|
|
391
|
-
if (global && !global.date) {
|
|
392
|
-
console.warn('This method of changing the locale is deprecated. See documentation for details.');
|
|
393
|
-
}
|
|
394
|
-
lang = code;
|
|
391
|
+
proto.locale = function (code, locale) {
|
|
392
|
+
if (!locales[code]) {
|
|
393
|
+
locales[code] = locale;
|
|
395
394
|
}
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Defining new plugin
|
|
399
|
+
* @param {string} name - plugin name
|
|
400
|
+
* @param {Function} plugin - plugin installer
|
|
401
|
+
* @returns {void}
|
|
402
|
+
*/
|
|
403
|
+
proto.plugin = function (name, plugin) {
|
|
404
|
+
if (!plugins[name]) {
|
|
405
|
+
plugins[name] = plugin;
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
var localized_proto = extend(proto);
|
|
410
|
+
var date = extend(proto);
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Changing locale
|
|
414
|
+
* @param {Function|string} [locale] - locale object | language code
|
|
415
|
+
* @returns {string} current language code
|
|
416
|
+
*/
|
|
417
|
+
date.locale = function (locale) {
|
|
418
|
+
var install = typeof locale === 'function' ? locale : date.locale[locale];
|
|
419
|
+
|
|
420
|
+
if (!install) {
|
|
421
|
+
return lang;
|
|
422
|
+
}
|
|
423
|
+
lang = install(proto);
|
|
424
|
+
|
|
425
|
+
var extension = locales[lang] || {};
|
|
426
|
+
var res = extend(_res, extension.res, true);
|
|
427
|
+
var formatter = extend(_formatter, extension.formatter, true, res);
|
|
428
|
+
var parser = extend(_parser, extension.parser, true, res);
|
|
429
|
+
|
|
430
|
+
date._formatter = localized_proto._formatter = formatter;
|
|
431
|
+
date._parser = localized_proto._parser = parser;
|
|
432
|
+
|
|
433
|
+
for (var plugin in plugins) {
|
|
434
|
+
date.extend(plugins[plugin]);
|
|
435
|
+
}
|
|
436
|
+
|
|
396
437
|
return lang;
|
|
397
438
|
};
|
|
398
439
|
|
|
399
440
|
/**
|
|
400
|
-
*
|
|
401
|
-
* @param {Object} extension -
|
|
441
|
+
* Feature extension
|
|
442
|
+
* @param {Object} extension - extension object
|
|
402
443
|
* @returns {void}
|
|
403
444
|
*/
|
|
404
445
|
date.extend = function (extension) {
|
|
446
|
+
var res = extend(date._parser.res, extension.res);
|
|
405
447
|
var extender = extension.extender || {};
|
|
406
448
|
|
|
449
|
+
date._formatter = extend(date._formatter, extension.formatter, false, res);
|
|
450
|
+
date._parser = extend(date._parser, extension.parser, false, res);
|
|
451
|
+
|
|
407
452
|
for (var key in extender) {
|
|
408
453
|
if (!date[key]) {
|
|
409
454
|
date[key] = extender[key];
|
|
410
455
|
}
|
|
411
456
|
}
|
|
412
|
-
if (extension.formatter || extension.parser || extension.res) {
|
|
413
|
-
customize(lang, locales[lang], extension);
|
|
414
|
-
}
|
|
415
457
|
};
|
|
416
458
|
|
|
417
459
|
/**
|
|
418
|
-
* plugin
|
|
419
|
-
* @param {Function|string} plugin - plugin
|
|
420
|
-
* @param {Object} [extension] - locale extension
|
|
460
|
+
* Importing plugin
|
|
461
|
+
* @param {Function|string} plugin - plugin object | plugin name
|
|
421
462
|
* @returns {void}
|
|
422
463
|
*/
|
|
423
|
-
date.plugin = function (plugin
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
plugins[
|
|
428
|
-
if (!extension && plugins[plugin]) {
|
|
429
|
-
date.extend(plugins[plugin]);
|
|
430
|
-
if (global && !global.date) {
|
|
431
|
-
console.warn('This method of applying plugins is deprecated. See documentation for details.');
|
|
432
|
-
}
|
|
433
|
-
}
|
|
464
|
+
date.plugin = function (plugin) {
|
|
465
|
+
var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
|
|
466
|
+
|
|
467
|
+
if (install) {
|
|
468
|
+
date.extend(plugins[install(proto, localized_proto)] || {});
|
|
434
469
|
}
|
|
435
470
|
};
|
|
436
471
|
|
|
437
|
-
|
|
438
|
-
date.locale(lang, {});
|
|
439
|
-
|
|
440
|
-
if (typeof module === 'object' && typeof module.exports === 'object') {
|
|
441
|
-
module.exports = date;
|
|
442
|
-
} else if (typeof define === 'function' && define.amd) {
|
|
443
|
-
define([], function () {
|
|
444
|
-
return date;
|
|
445
|
-
});
|
|
446
|
-
} else {
|
|
447
|
-
global.date = date;
|
|
448
|
-
}
|
|
472
|
+
return date;
|
|
449
473
|
|
|
450
|
-
}
|
|
474
|
+
}));
|
package/date-and-time.min.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/*
|
|
2
|
-
date-and-time
|
|
2
|
+
date-and-time (c) KNOWLEDGECODE | MIT
|
|
3
3
|
*/
|
|
4
|
-
(function(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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,
|
|
10
|
-
|
|
11
|
-
0);var
|
|
12
|
-
else if(
|
|
13
|
-
function(a,
|
|
14
|
-
|
|
15
|
-
!(a%400)}
|
|
16
|
-
(d.extend(
|
|
4
|
+
'use strict';(function(n,l){"object"===typeof exports&&"undefined"!==typeof module?module.exports=l():"function"===typeof define&&define.amd?define(l):(n="undefined"!==typeof globalThis?globalThis:n||self,n.date=l())})(this,function(){var n={},l={},q="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
|
+
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.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,f=0,e=a.length,k;f<e;f++)k=a[f],!b.indexOf(k)&&k.length>d&&(c=f,d=k.length);return{value:c,length:d}},pre:function(a){return a},res:t},m=function(a,b,c,d){var f={},e;for(e in a)f[e]=a[e];for(e in b||{})!!c^!!f[e]||(f[e]=b[e]);d&&(f.res=d);return f},r={_formatter:w,_parser:x,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
|
+
format:function(a,b,c){b="string"===typeof b?this.compile(b):b;var d=a.getTimezoneOffset();a=this.addMinutes(a,c?d:0);var f=this._formatter,e="";a.getTimezoneOffset=function(){return c?0:d};for(var k=1,u=b.length,h;k<u;k++)h=b[k],e+=f[h]?f.post(f[h](a,b[0])):h.replace(/\[(.*)]/,"$1");return e},preparse:function(a,b){b="string"===typeof b?this.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},d=/\[(.*)]/,f=this._parser,e=0;a=f.pre(a);for(var k=1,u=b.length,
|
|
12
|
+
h,p;k<u;k++)if(h=b[k],f[h]){p=f[h](a.slice(e),b[0]);if(!p.length)break;e+=p.length;c[p.token||h.charAt(0)]=p.value;c._match++}else if(h===a.charAt(e)||" "===h)e++;else if(d.test(h)&&!a.slice(e).indexOf(d.exec(h)[1]))e+=h.length-2;else{"..."===h&&(e=a.length);break}c.H=c.H||f.h12(c.h,c.A);c._index=e;c._length=a.length;return c},parse:function(a,b,c){a=this.preparse(a,b);return this.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,
|
|
13
|
+
a.m,a.s,a.S)):new Date(NaN)},isValid:function(a,b){a="string"===typeof a?this.preparse(a,b):a;b=[31,28+this.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)},transform:function(a,b,c,d){return this.format(this.parse(a,b),c,d)},addYears:function(a,b){return this.addMonths(a,12*b)},addMonths:function(a,b){a=
|
|
14
|
+
new Date(a.getTime());a.setMonth(a.getMonth()+b);return a},addDays:function(a,b){a=new Date(a.getTime());a.setDate(a.getDate()+b);return a},addHours:function(a,b){return this.addMinutes(a,60*b)},addMinutes:function(a,b){return this.addSeconds(a,60*b)},addSeconds:function(a,b){return this.addMilliseconds(a,1E3*b)},addMilliseconds:function(a,b){return new Date(a.getTime()+b)},subtract:function(a,b){var c=a.getTime()-b.getTime();return{toMilliseconds:function(){return c},toSeconds:function(){return c/
|
|
15
|
+
1E3},toMinutes:function(){return c/6E4},toHours:function(){return c/36E5},toDays:function(){return c/864E5}}},isLeapYear:function(a){return!(a%4)&&!!(a%100)||!(a%400)},isSameDay:function(a,b){return a.toDateString()===b.toDateString()},locale:function(a,b){n[a]||(n[a]=b)},plugin:function(a,b){l[a]||(l[a]=b)}},v=m(r),g=m(r);g.locale=function(a){a="function"===typeof a?a:g.locale[a];if(!a)return q;q=a(r);var b=n[q]||{},c=m(t,b.res,!0);a=m(w,b.formatter,!0,c);b=m(x,b.parser,!0,c);g._formatter=v._formatter=
|
|
16
|
+
a;g._parser=v._parser=b;for(var d in l)g.extend(l[d]);return q};g.extend=function(a){var b=m(g._parser.res,a.res),c=a.extender||{};g._formatter=m(g._formatter,a.formatter,!1,b);g._parser=m(g._parser,a.parser,!1,b);for(var d in c)g[d]||(g[d]=c[d])};g.plugin=function(a){(a="function"===typeof a?a:g.plugin[a])&&g.extend(l[a(r,v)]||{})};return g})
|