@blazedpath/commons 0.0.7 → 0.0.9

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.
@@ -1,356 +1,358 @@
1
1
  module.exports = {
2
- convertMilliseconds: function(strMilliseconds) {
3
- if (strMilliseconds) {
4
- if (strMilliseconds.length < 3)
5
- strMilliseconds = strMilliseconds.padEnd(3, '0');
6
- if (strMilliseconds.length > 3)
7
- strMilliseconds = strMilliseconds.substr(0, 3);
8
- return Number(strMilliseconds);
9
- }
10
- else
11
- return 0;
12
- },
13
- tryDatetime: function (value) {
14
- let strType = toString.call(value);
15
- if (strType === '[object Date]') {
16
- return value;
17
- }
18
- else if (strType === '[object String]') {
19
- let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
20
- if (matchDatetimeUtc && matchDatetimeUtc[7] !== undefined) {
21
- return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), Number(matchDatetimeUtc[4]), Number(matchDatetimeUtc[5]), Number(matchDatetimeUtc[6] || 0), this.convertMilliseconds(matchDatetimeUtc[7])));
2
+ Dual: {
3
+ convertMilliseconds: function (strMilliseconds) {
4
+ if (strMilliseconds) {
5
+ if (strMilliseconds.length < 3)
6
+ strMilliseconds = strMilliseconds.padEnd(3, '0');
7
+ if (strMilliseconds.length > 3)
8
+ strMilliseconds = strMilliseconds.substr(0, 3);
9
+ return Number(strMilliseconds);
22
10
  }
23
- let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
24
- if (matchDatetimeZone) { // timezone
25
- let year = Number(matchDatetimeZone[1]);
26
- let month = Number(matchDatetimeZone[2]) - 1; // Month is zero-based in JavaScript Date
27
- let day = Number(matchDatetimeZone[3]);
28
- let hour = Number(matchDatetimeZone[4]);
29
- let minute = Number(matchDatetimeZone[5]);
30
- let second = Number(matchDatetimeZone[6] || 0);
31
- let millisecond = this.convertMilliseconds(matchDatetimeZone[7]);
32
- let timezoneOffset = matchDatetimeZone[8];
33
- if (timezoneOffset) {
34
- let offsetSign = timezoneOffset[0] === "+" ? 1 : -1;
35
- let [offsetHour, offsetMinute] = timezoneOffset.slice(1).split(":").map(Number);
36
- hour -= offsetSign * offsetHour;
37
- minute -= offsetSign * offsetMinute;
38
- }
39
- return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
11
+ else
12
+ return 0;
13
+ },
14
+ tryDatetime: function (value) {
15
+ let strType = toString.call(value);
16
+ if (strType === '[object Date]') {
17
+ return value;
40
18
  }
41
- else {
42
- const probableDate = new Date(value)
43
- if (probableDate.toString() !== 'Invalid Date') {
44
- return probableDate
19
+ else if (strType === '[object String]') {
20
+ let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
21
+ if (matchDatetimeUtc && matchDatetimeUtc[7] !== undefined) {
22
+ return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), Number(matchDatetimeUtc[4]), Number(matchDatetimeUtc[5]), Number(matchDatetimeUtc[6] || 0), this.convertMilliseconds(matchDatetimeUtc[7])));
23
+ }
24
+ let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
25
+ if (matchDatetimeZone) { // timezone
26
+ let year = Number(matchDatetimeZone[1]);
27
+ let month = Number(matchDatetimeZone[2]) - 1; // Month is zero-based in JavaScript Date
28
+ let day = Number(matchDatetimeZone[3]);
29
+ let hour = Number(matchDatetimeZone[4]);
30
+ let minute = Number(matchDatetimeZone[5]);
31
+ let second = Number(matchDatetimeZone[6] || 0);
32
+ let millisecond = this.convertMilliseconds(matchDatetimeZone[7]);
33
+ let timezoneOffset = matchDatetimeZone[8];
34
+ if (timezoneOffset) {
35
+ let offsetSign = timezoneOffset[0] === "+" ? 1 : -1;
36
+ let [offsetHour, offsetMinute] = timezoneOffset.slice(1).split(":").map(Number);
37
+ hour -= offsetSign * offsetHour;
38
+ minute -= offsetSign * offsetMinute;
39
+ }
40
+ return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
41
+ }
42
+ else {
43
+ const probableDate = new Date(value)
44
+ if (probableDate.toString() !== 'Invalid Date') {
45
+ return probableDate
46
+ }
45
47
  }
46
48
  }
49
+ let err = new Error();
50
+ err.code = 'InvalidDatetime';
51
+ err.data = { value: value };
52
+ throw err;
53
+ },
54
+ tryDate: function (value) {
55
+ let strType = toString.call(value);
56
+ if (strType === '[object Date]') {
57
+ return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), 0, 0, 0, 0));
58
+ }
59
+ else if (strType === '[object String]') {
60
+ let match = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(value);
61
+ if (match)
62
+ return new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]), 0, 0, 0, 0));
63
+ }
64
+ let err = new Error();
65
+ err.code = 'InvalidDate';
66
+ err.data = { value: value };
67
+ throw err;
68
+ },
69
+ tryTime: function (value) {
70
+ let strType = toString.call(value);
71
+ if (strType === '[object Date]') {
72
+ return new Date(Date.UTC(1970, 0, 1, value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()));
73
+ }
74
+ else if (strType === '[object String]') {
75
+ let match = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?$/.exec(value);
76
+ if (match)
77
+ return new Date(Date.UTC(1970, 0, 1, Number(match[1]), Number(match[2]), Number(match[3]), this.convertMilliseconds(match[4])));
78
+ }
79
+ let err = new Error();
80
+ err.code = 'InvalidTime';
81
+ err.data = { value: value };
82
+ throw err;
83
+ },
84
+ addDays: function (value, days) {
85
+ if (value === null || value === undefined)
86
+ return null;
87
+ if (days === null || days === undefined)
88
+ return value;
89
+ let datetime = this.tryDatetime(value);
90
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate() + days, datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
91
+ },
92
+ addHours: function (value, hours) {
93
+ if (value === null || value === undefined)
94
+ return null;
95
+ if (hours === null || hours === undefined)
96
+ return value;
97
+ let datetime = this.tryDatetime(value);
98
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours() + hours, datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
99
+ },
100
+ addMilliseconds: function (value, milliseconds) {
101
+ if (value === null || value === undefined)
102
+ return null;
103
+ if (milliseconds === null || milliseconds === undefined)
104
+ return value;
105
+ let datetime = this.tryDatetime(value);
106
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds() + milliseconds));
107
+ },
108
+ addMinutes: function (value, minutes) {
109
+ if (value === null || value === undefined)
110
+ return null;
111
+ if (minutes === null || minutes === undefined)
112
+ return value;
113
+ let datetime = this.tryDatetime(value);
114
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes() + minutes, datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
115
+ },
116
+ addMonths: function (value, months) {
117
+ if (value === null || value === undefined)
118
+ return null;
119
+ if (months === null || months === undefined)
120
+ return value;
121
+ let datetime = this.tryDatetime(value);
122
+ let year = datetime.getUTCFullYear();
123
+ let month = datetime.getUTCMonth() + months;
124
+ let day = datetime.getUTCDate();
125
+ let hour = datetime.getUTCHours();
126
+ let minute = datetime.getUTCMinutes();
127
+ let second = datetime.getUTCSeconds();
128
+ let millisecond = datetime.getUTCMilliseconds();
129
+ let targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
130
+ while (day > targetDatetime.getUTCDate()) {
131
+ day--;
132
+ targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
133
+ }
134
+ return targetDatetime;
135
+ },
136
+ addSeconds: function (value, seconds) {
137
+ if (value === null || value === undefined)
138
+ return null;
139
+ if (seconds === null || seconds === undefined)
140
+ return value;
141
+ let datetime = this.tryDatetime(value);
142
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds() + seconds, datetime.getUTCMilliseconds()));
143
+ },
144
+ addYears: function (value, years) {
145
+ if (value === null || value === undefined)
146
+ return null;
147
+ if (years === null || years === undefined)
148
+ return value;
149
+ let datetime = this.tryDatetime(value);
150
+ let year = datetime.getUTCFullYear() + years;
151
+ let month = datetime.getUTCMonth();
152
+ let day = datetime.getUTCDate();
153
+ let hour = datetime.getUTCHours();
154
+ let minute = datetime.getUTCMinutes();
155
+ let second = datetime.getUTCSeconds();
156
+ let millisecond = datetime.getUTCMilliseconds();
157
+ let targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
158
+ while (day > targetDatetime.getUTCDate()) {
159
+ day--;
160
+ targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
161
+ }
162
+ return targetDatetime;
163
+ },
164
+ date: function (year, month, day) {
165
+ if (year === null || year === undefined)
166
+ return null;
167
+ if (month === null || month === undefined)
168
+ return null;
169
+ if (day === null || day === undefined)
170
+ return null;
171
+ return new Date(Date.UTC(year, month - 1, day));
172
+ },
173
+ dateDiff: function (date1, date2) {
174
+ if (date1 === null || date1 === undefined)
175
+ return null;
176
+ if (date2 === null || date2 === undefined)
177
+ return date1;
178
+ return (this.tryDate(date1) - this.tryDate(date2)) / 86400000;
179
+ },
180
+ datetime: function (year, month, day, hour, minute, second, milliseconds) {
181
+ if (year === null || year === undefined)
182
+ return null;
183
+ if (month === null || month === undefined)
184
+ return null;
185
+ if (day === null || day === undefined)
186
+ return null;
187
+ if (hour === null || hour === undefined)
188
+ return null;
189
+ if (minute === null || minute === undefined)
190
+ return null;
191
+ if (second === null || second === undefined)
192
+ return null;
193
+ return new Date(Date.UTC(year, month - 1, day, hour, minute, second, 0));
194
+ },
195
+ datetimeDiff: function (datetime1, datetime2) {
196
+ if (datetime1 === null || datetime1 === undefined)
197
+ return null;
198
+ if (datetime2 === null || datetime2 === undefined)
199
+ return datetime1;
200
+ return this.tryDatetime(datetime1) - this.tryDatetime(datetime2);
201
+ },
202
+ day: function (value) {
203
+ if (value === null || value === undefined)
204
+ return null;
205
+ let datetime = this.tryDatetime(value);
206
+ return datetime.getUTCDate();
207
+ },
208
+ hour: function (value) {
209
+ if (value === null || value === undefined)
210
+ return null;
211
+ let datetime = this.tryDatetime(value);
212
+ return datetime.getUTCHours();
213
+ },
214
+ millisecond: function (value) {
215
+ if (value === null || value === undefined)
216
+ return null;
217
+ let datetime = this.tryDatetime(value);
218
+ return datetime.getUTCMilliseconds();
219
+ },
220
+ minute: function (value) {
221
+ if (value === null || value === undefined)
222
+ return null;
223
+ let datetime = this.tryDatetime(value);
224
+ return datetime.getUTCMinutes();
225
+ },
226
+ month: function (value) {
227
+ if (value === null || value === undefined)
228
+ return null;
229
+ let datetime = this.tryDatetime(value);
230
+ return datetime.getUTCMonth() + 1;
231
+ },
232
+ monthText: function (value) {
233
+ if (value === null || value === undefined)
234
+ return null;
235
+ let datetime = this.tryDatetime(value);
236
+ switch (datetime.getUTCMonth()) {
237
+ case 0: return 'January';
238
+ case 1: return 'February';
239
+ case 2: return 'March';
240
+ case 3: return 'April';
241
+ case 4: return 'May';
242
+ case 5: return 'June';
243
+ case 6: return 'July';
244
+ case 7: return 'August';
245
+ case 8: return 'September';
246
+ case 9: return 'October';
247
+ case 10: return 'November';
248
+ case 11: return 'December';
249
+ }
250
+ },
251
+ now: function () {
252
+ let now = new Date(Date.now());
253
+ return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()));
254
+ },
255
+ second: function (value) {
256
+ if (value === null || value === undefined)
257
+ return null;
258
+ let datetime = this.tryDatetime(value);
259
+ return datetime.getUTCSeconds();
260
+ },
261
+ subtractDays: function (value, days) {
262
+ if (value === null || value === undefined)
263
+ return null;
264
+ if (days === null || days === undefined)
265
+ return value;
266
+ let datetime = this.tryDatetime(value);
267
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate() - days, datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
268
+ },
269
+ subtractHours: function (value, hours) {
270
+ if (value === null || value === undefined)
271
+ return null;
272
+ if (hours === null || hours === undefined)
273
+ return value;
274
+ let datetime = this.tryDatetime(value);
275
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours() - hours, datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
276
+ },
277
+ subtractMilliseconds: function (value, milliseconds) {
278
+ if (value === null || value === undefined)
279
+ return null;
280
+ if (milliseconds === null || milliseconds === undefined)
281
+ return value;
282
+ let datetime = this.tryDatetime(value);
283
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds() - milliseconds));
284
+ },
285
+ subtractMinutes: function (value, minutes) {
286
+ if (value === null || value === undefined)
287
+ return null;
288
+ if (minutes === null || minutes === undefined)
289
+ return value;
290
+ let datetime = this.tryDatetime(value);
291
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes() - minutes, datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
292
+ },
293
+ subtractSeconds: function (value, seconds) {
294
+ if (value === null || value === undefined)
295
+ return null;
296
+ if (seconds === null || seconds === undefined)
297
+ return value;
298
+ let datetime = this.tryDatetime(value);
299
+ return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds() - seconds, datetime.getUTCMilliseconds()));
300
+ },
301
+ time: function (hour, minute, second, milliseconds) {
302
+ if (hour === null || hour === undefined)
303
+ return null;
304
+ if (minute === null || minute === undefined)
305
+ return null;
306
+ if (second === null || second === undefined)
307
+ return null;
308
+ return new Date(Date.UTC(1970, 0, 1, hour, minute, second, 0));
309
+ },
310
+ timeDiff: function (time1, time2) {
311
+ if (time1 === null || time1 === undefined)
312
+ return null;
313
+ if (time2 === null || time2 === undefined)
314
+ return time1;
315
+ return this.tryTime(time1) - this.tryTime(time2);
316
+ },
317
+ today: function () {
318
+ let now = new Date(Date.now());
319
+ return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), 0, 0, 0, 0));
320
+ },
321
+ week: function (value) {
322
+ if (value === null || value === undefined)
323
+ return null;
324
+ let datetime = this.tryDatetime(value);
325
+ let d = new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate()));
326
+ let dayNum = d.getUTCDay() || 7;
327
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum);
328
+ let yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
329
+ return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
330
+ },
331
+ weekDay: function (value) {
332
+ if (value === null || value === undefined)
333
+ return null;
334
+ let datetime = this.tryDatetime(value);
335
+ return datetime.getUTCDay();
336
+ },
337
+ weekDayText: function (value) {
338
+ if (value === null || value === undefined)
339
+ return null;
340
+ let datetime = this.tryDatetime(value);
341
+ switch (datetime.getUTCDay()) {
342
+ case 0: return 'Sunday';
343
+ case 1: return 'Monday';
344
+ case 2: return 'Tuesday';
345
+ case 3: return 'Wednesday';
346
+ case 4: return 'Thursday';
347
+ case 5: return 'Friday';
348
+ case 6: return 'Saturday';
349
+ }
350
+ },
351
+ year: function (value) {
352
+ if (value === null || value === undefined)
353
+ return null;
354
+ let datetime = this.tryDatetime(value);
355
+ return datetime.getUTCFullYear();
47
356
  }
48
- let err = new Error();
49
- err.code = 'InvalidDatetime';
50
- err.data = { value: value };
51
- throw err;
52
- },
53
- tryDate: function (value) {
54
- let strType = toString.call(value);
55
- if (strType === '[object Date]') {
56
- return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), 0, 0, 0, 0));
57
- }
58
- else if (strType === '[object String]') {
59
- let match = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(value);
60
- if (match)
61
- return new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]), 0, 0, 0, 0));
62
- }
63
- let err = new Error();
64
- err.code = 'InvalidDate';
65
- err.data = { value: value };
66
- throw err;
67
- },
68
- tryTime: function (value) {
69
- let strType = toString.call(value);
70
- if (strType === '[object Date]') {
71
- return new Date(Date.UTC(1970, 0, 1, value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()));
72
- }
73
- else if (strType === '[object String]') {
74
- let match = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?$/.exec(value);
75
- if (match)
76
- return new Date(Date.UTC(1970, 0, 1, Number(match[1]), Number(match[2]), Number(match[3]), this.convertMilliseconds(match[4])));
77
- }
78
- let err = new Error();
79
- err.code = 'InvalidTime';
80
- err.data = { value: value };
81
- throw err;
82
- },
83
- addDays: function (value, days) {
84
- if (value === null || value === undefined)
85
- return null;
86
- if (days === null || days === undefined)
87
- return value;
88
- let datetime = this.tryDatetime(value);
89
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate() + days, datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
90
- },
91
- addHours: function (value, hours) {
92
- if (value === null || value === undefined)
93
- return null;
94
- if (hours === null || hours === undefined)
95
- return value;
96
- let datetime = this.tryDatetime(value);
97
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours() + hours, datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
98
- },
99
- addMilliseconds: function (value, milliseconds) {
100
- if (value === null || value === undefined)
101
- return null;
102
- if (milliseconds === null || milliseconds === undefined)
103
- return value;
104
- let datetime = this.tryDatetime(value);
105
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds() + milliseconds));
106
- },
107
- addMinutes: function (value, minutes) {
108
- if (value === null || value === undefined)
109
- return null;
110
- if (minutes === null || minutes === undefined)
111
- return value;
112
- let datetime = this.tryDatetime(value);
113
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes() + minutes, datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
114
- },
115
- addMonths: function (value, months) {
116
- if (value === null || value === undefined)
117
- return null;
118
- if (months === null || months === undefined)
119
- return value;
120
- let datetime = this.tryDatetime(value);
121
- let year = datetime.getUTCFullYear();
122
- let month = datetime.getUTCMonth() + months;
123
- let day = datetime.getUTCDate();
124
- let hour = datetime.getUTCHours();
125
- let minute = datetime.getUTCMinutes();
126
- let second = datetime.getUTCSeconds();
127
- let millisecond = datetime.getUTCMilliseconds();
128
- let targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
129
- while (day > targetDatetime.getUTCDate()) {
130
- day--;
131
- targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
132
- }
133
- return targetDatetime;
134
- },
135
- addSeconds: function (value, seconds) {
136
- if (value === null || value === undefined)
137
- return null;
138
- if (seconds === null || seconds === undefined)
139
- return value;
140
- let datetime = this.tryDatetime(value);
141
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds() + seconds, datetime.getUTCMilliseconds()));
142
- },
143
- addYears: function (value, years) {
144
- if (value === null || value === undefined)
145
- return null;
146
- if (years === null || years === undefined)
147
- return value;
148
- let datetime = this.tryDatetime(value);
149
- let year = datetime.getUTCFullYear() + years;
150
- let month = datetime.getUTCMonth();
151
- let day = datetime.getUTCDate();
152
- let hour = datetime.getUTCHours();
153
- let minute = datetime.getUTCMinutes();
154
- let second = datetime.getUTCSeconds();
155
- let millisecond = datetime.getUTCMilliseconds();
156
- let targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
157
- while (day > targetDatetime.getUTCDate()) {
158
- day--;
159
- targetDatetime = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
160
- }
161
- return targetDatetime;
162
- },
163
- date: function (year, month, day) {
164
- if (year === null || year === undefined)
165
- return null;
166
- if (month === null ||month === undefined)
167
- return null;
168
- if (day === null || day === undefined)
169
- return null;
170
- return new Date(Date.UTC(year, month - 1, day));
171
- },
172
- dateDiff: function (date1, date2) {
173
- if (date1 === null || date1 === undefined)
174
- return null;
175
- if (date2 === null || date2 === undefined)
176
- return date1;
177
- return (this.tryDate(date1) - this.tryDate(date2)) / 86400000;
178
- },
179
- datetime: function (year, month, day, hour, minute, second, milliseconds) {
180
- if (year === null || year === undefined)
181
- return null;
182
- if (month === null ||month === undefined)
183
- return null;
184
- if (day === null || day === undefined)
185
- return null;
186
- if (hour === null || hour === undefined)
187
- return null;
188
- if (minute === null || minute === undefined)
189
- return null;
190
- if (second === null || second === undefined)
191
- return null;
192
- return new Date(Date.UTC(year, month - 1, day, hour, minute, second, 0));
193
- },
194
- datetimeDiff: function (datetime1, datetime2) {
195
- if (datetime1 === null || datetime1 === undefined)
196
- return null;
197
- if (datetime2 === null || datetime2 === undefined)
198
- return datetime1;
199
- return this.tryDatetime(datetime1) - this.tryDatetime(datetime2);
200
- },
201
- day: function (value) {
202
- if (value === null || value === undefined)
203
- return null;
204
- let datetime = this.tryDatetime(value);
205
- return datetime.getUTCDate();
206
- },
207
- hour: function (value) {
208
- if (value === null || value === undefined)
209
- return null;
210
- let datetime = this.tryDatetime(value);
211
- return datetime.getUTCHours();
212
- },
213
- millisecond: function (value) {
214
- if (value === null || value === undefined)
215
- return null;
216
- let datetime = this.tryDatetime(value);
217
- return datetime.getUTCMilliseconds();
218
- },
219
- minute: function (value) {
220
- if (value === null || value === undefined)
221
- return null;
222
- let datetime = this.tryDatetime(value);
223
- return datetime.getUTCMinutes();
224
- },
225
- month: function (value) {
226
- if (value === null || value === undefined)
227
- return null;
228
- let datetime = this.tryDatetime(value);
229
- return datetime.getUTCMonth() + 1;
230
- },
231
- monthText: function (value) {
232
- if (value === null || value === undefined)
233
- return null;
234
- let datetime = this.tryDatetime(value);
235
- switch (datetime.getUTCMonth()) {
236
- case 0: return 'January';
237
- case 1: return 'February';
238
- case 2: return 'March';
239
- case 3: return 'April';
240
- case 4: return 'May';
241
- case 5: return 'June';
242
- case 6: return 'July';
243
- case 7: return 'August';
244
- case 8: return 'September';
245
- case 9: return 'October';
246
- case 10: return 'November';
247
- case 11: return 'December';
248
- }
249
- },
250
- now: function () {
251
- let now = new Date(Date.now());
252
- return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()));
253
- },
254
- second: function (value) {
255
- if (value === null || value === undefined)
256
- return null;
257
- let datetime = this.tryDatetime(value);
258
- return datetime.getUTCSeconds();
259
- },
260
- subtractDays: function (value, days) {
261
- if (value === null || value === undefined)
262
- return null;
263
- if (days === null || days === undefined)
264
- return value;
265
- let datetime = this.tryDatetime(value);
266
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate() - days, datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
267
- },
268
- subtractHours: function (value, hours) {
269
- if (value === null || value === undefined)
270
- return null;
271
- if (hours === null || hours === undefined)
272
- return value;
273
- let datetime = this.tryDatetime(value);
274
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours() - hours, datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
275
- },
276
- subtractMilliseconds: function (value, milliseconds) {
277
- if (value === null || value === undefined)
278
- return null;
279
- if (milliseconds === null || milliseconds === undefined)
280
- return value;
281
- let datetime = this.tryDatetime(value);
282
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds() - milliseconds));
283
- },
284
- subtractMinutes: function (value, minutes) {
285
- if (value === null || value === undefined)
286
- return null;
287
- if (minutes === null || minutes === undefined)
288
- return value;
289
- let datetime = this.tryDatetime(value);
290
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes() - minutes, datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
291
- },
292
- subtractSeconds: function (value, seconds) {
293
- if (value === null || value === undefined)
294
- return null;
295
- if (seconds === null || seconds === undefined)
296
- return value;
297
- let datetime = this.tryDatetime(value);
298
- return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds() - seconds, datetime.getUTCMilliseconds()));
299
- },
300
- time: function (hour, minute, second, milliseconds) {
301
- if (hour === null || hour === undefined)
302
- return null;
303
- if (minute === null || minute === undefined)
304
- return null;
305
- if (second === null || second === undefined)
306
- return null;
307
- return new Date(Date.UTC(1970, 0, 1, hour, minute, second, 0));
308
- },
309
- timeDiff: function (time1, time2) {
310
- if (time1 === null || time1 === undefined)
311
- return null;
312
- if (time2 === null || time2 === undefined)
313
- return time1;
314
- return this.tryTime(time1) - this.tryTime(time2);
315
- },
316
- today: function () {
317
- let now = new Date(Date.now());
318
- return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), 0, 0, 0, 0));
319
- },
320
- week: function (value) {
321
- if (value === null || value === undefined)
322
- return null;
323
- let datetime = this.tryDatetime(value);
324
- let d = new Date( Date.UTC( datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate() ) );
325
- let dayNum = d.getUTCDay() || 7;
326
- d.setUTCDate(d.getUTCDate() + 4 - dayNum);
327
- let yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
328
- return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
329
- },
330
- weekDay: function (value) {
331
- if (value === null || value === undefined)
332
- return null;
333
- let datetime = this.tryDatetime(value);
334
- return datetime.getUTCDay();
335
- },
336
- weekDayText: function (value) {
337
- if (value === null || value === undefined)
338
- return null;
339
- let datetime = this.tryDatetime(value);
340
- switch (datetime.getUTCDay()) {
341
- case 0: return 'Sunday';
342
- case 1: return 'Monday';
343
- case 2: return 'Tuesday';
344
- case 3: return 'Wednesday';
345
- case 4: return 'Thursday';
346
- case 5: return 'Friday';
347
- case 6: return 'Saturday';
348
- }
349
- },
350
- year: function (value) {
351
- if (value === null || value === undefined)
352
- return null;
353
- let datetime = this.tryDatetime(value);
354
- return datetime.getUTCFullYear();
355
357
  }
356
358
  };