UNPKG

11.9 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.validateRangeInOneMonth = exports.extractTimeFormat = exports.extractDateFormat = exports.nextYear = exports.prevYear = exports.nextMonth = exports.prevMonth = exports.changeYearMonthAndClampDate = exports.timeWithinRange = exports.limitTimeRange = exports.clearMilliseconds = exports.clearTime = exports.modifyWithTimeString = exports.modifyTime = exports.modifyDate = exports.range = exports.getRangeMinutes = exports.getMonthDays = exports.getPrevMonthLastDays = exports.getRangeHours = exports.getWeekNumber = exports.getStartDateOfMonth = exports.nextDate = exports.prevDate = exports.getFirstDayOfMonth = exports.getDayCountOfYear = exports.getDayCountOfMonth = exports.parseDate = exports.formatDate = exports.isDateObject = exports.isDate = exports.toDate = exports.getI18nSettings = undefined;
5
6var _date = require('element-ui/lib/utils/date');
7
8var _date2 = _interopRequireDefault(_date);
9
10var _locale = require('element-ui/lib/locale');
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14var weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
15var months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
16
17var newArray = function newArray(start, end) {
18 var result = [];
19 for (var i = start; i <= end; i++) {
20 result.push(i);
21 }
22 return result;
23};
24
25var getI18nSettings = exports.getI18nSettings = function getI18nSettings() {
26 return {
27 dayNamesShort: weeks.map(function (week) {
28 return (0, _locale.t)('el.datepicker.weeks.' + week);
29 }),
30 dayNames: weeks.map(function (week) {
31 return (0, _locale.t)('el.datepicker.weeks.' + week);
32 }),
33 monthNamesShort: months.map(function (month) {
34 return (0, _locale.t)('el.datepicker.months.' + month);
35 }),
36 monthNames: months.map(function (month, index) {
37 return (0, _locale.t)('el.datepicker.month' + (index + 1));
38 }),
39 amPm: ['am', 'pm']
40 };
41};
42
43var toDate = exports.toDate = function toDate(date) {
44 return isDate(date) ? new Date(date) : null;
45};
46
47var isDate = exports.isDate = function isDate(date) {
48 if (date === null || date === undefined) return false;
49 if (isNaN(new Date(date).getTime())) return false;
50 if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`
51 return true;
52};
53
54var isDateObject = exports.isDateObject = function isDateObject(val) {
55 return val instanceof Date;
56};
57
58var formatDate = exports.formatDate = function formatDate(date, format) {
59 date = toDate(date);
60 if (!date) return '';
61 return _date2.default.format(date, format || 'yyyy-MM-dd', getI18nSettings());
62};
63
64var parseDate = exports.parseDate = function parseDate(string, format) {
65 return _date2.default.parse(string, format || 'yyyy-MM-dd', getI18nSettings());
66};
67
68var getDayCountOfMonth = exports.getDayCountOfMonth = function getDayCountOfMonth(year, month) {
69 if (month === 3 || month === 5 || month === 8 || month === 10) {
70 return 30;
71 }
72
73 if (month === 1) {
74 if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
75 return 29;
76 } else {
77 return 28;
78 }
79 }
80
81 return 31;
82};
83
84var getDayCountOfYear = exports.getDayCountOfYear = function getDayCountOfYear(year) {
85 var isLeapYear = year % 400 === 0 || year % 100 !== 0 && year % 4 === 0;
86 return isLeapYear ? 366 : 365;
87};
88
89var getFirstDayOfMonth = exports.getFirstDayOfMonth = function getFirstDayOfMonth(date) {
90 var temp = new Date(date.getTime());
91 temp.setDate(1);
92 return temp.getDay();
93};
94
95// see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript
96// {prev, next} Date should work for Daylight Saving Time
97// Adding 24 * 60 * 60 * 1000 does not work in the above scenario
98var prevDate = exports.prevDate = function prevDate(date) {
99 var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
100
101 return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);
102};
103
104var nextDate = exports.nextDate = function nextDate(date) {
105 var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
106
107 return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
108};
109
110var getStartDateOfMonth = exports.getStartDateOfMonth = function getStartDateOfMonth(year, month) {
111 var result = new Date(year, month, 1);
112 var day = result.getDay();
113
114 if (day === 0) {
115 return prevDate(result, 7);
116 } else {
117 return prevDate(result, day);
118 }
119};
120
121var getWeekNumber = exports.getWeekNumber = function getWeekNumber(src) {
122 if (!isDate(src)) return null;
123 var date = new Date(src.getTime());
124 date.setHours(0, 0, 0, 0);
125 // Thursday in current week decides the year.
126 date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
127 // January 4 is always in week 1.
128 var week1 = new Date(date.getFullYear(), 0, 4);
129 // Adjust to Thursday in week 1 and count number of weeks from date to week 1.
130 // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.
131 return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);
132};
133
134var getRangeHours = exports.getRangeHours = function getRangeHours(ranges) {
135 var hours = [];
136 var disabledHours = [];
137
138 (ranges || []).forEach(function (range) {
139 var value = range.map(function (date) {
140 return date.getHours();
141 });
142
143 disabledHours = disabledHours.concat(newArray(value[0], value[1]));
144 });
145
146 if (disabledHours.length) {
147 for (var i = 0; i < 24; i++) {
148 hours[i] = disabledHours.indexOf(i) === -1;
149 }
150 } else {
151 for (var _i = 0; _i < 24; _i++) {
152 hours[_i] = false;
153 }
154 }
155
156 return hours;
157};
158
159var getPrevMonthLastDays = exports.getPrevMonthLastDays = function getPrevMonthLastDays(date, amount) {
160 if (amount <= 0) return [];
161 var temp = new Date(date.getTime());
162 temp.setDate(0);
163 var lastDay = temp.getDate();
164 return range(amount).map(function (_, index) {
165 return lastDay - (amount - index - 1);
166 });
167};
168
169var getMonthDays = exports.getMonthDays = function getMonthDays(date) {
170 var temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);
171 var days = temp.getDate();
172 return range(days).map(function (_, index) {
173 return index + 1;
174 });
175};
176
177function setRangeData(arr, start, end, value) {
178 for (var i = start; i < end; i++) {
179 arr[i] = value;
180 }
181}
182
183var getRangeMinutes = exports.getRangeMinutes = function getRangeMinutes(ranges, hour) {
184 var minutes = new Array(60);
185
186 if (ranges.length > 0) {
187 ranges.forEach(function (range) {
188 var start = range[0];
189 var end = range[1];
190 var startHour = start.getHours();
191 var startMinute = start.getMinutes();
192 var endHour = end.getHours();
193 var endMinute = end.getMinutes();
194 if (startHour === hour && endHour !== hour) {
195 setRangeData(minutes, startMinute, 60, true);
196 } else if (startHour === hour && endHour === hour) {
197 setRangeData(minutes, startMinute, endMinute + 1, true);
198 } else if (startHour !== hour && endHour === hour) {
199 setRangeData(minutes, 0, endMinute + 1, true);
200 } else if (startHour < hour && endHour > hour) {
201 setRangeData(minutes, 0, 60, true);
202 }
203 });
204 } else {
205 setRangeData(minutes, 0, 60, true);
206 }
207 return minutes;
208};
209
210var range = exports.range = function range(n) {
211 // see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n
212 return Array.apply(null, { length: n }).map(function (_, n) {
213 return n;
214 });
215};
216
217var modifyDate = exports.modifyDate = function modifyDate(date, y, m, d) {
218 return new Date(y, m, d, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
219};
220
221var modifyTime = exports.modifyTime = function modifyTime(date, h, m, s) {
222 return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds());
223};
224
225var modifyWithTimeString = exports.modifyWithTimeString = function modifyWithTimeString(date, time) {
226 if (date == null || !time) {
227 return date;
228 }
229 time = parseDate(time, 'HH:mm:ss');
230 return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());
231};
232
233var clearTime = exports.clearTime = function clearTime(date) {
234 return new Date(date.getFullYear(), date.getMonth(), date.getDate());
235};
236
237var clearMilliseconds = exports.clearMilliseconds = function clearMilliseconds(date) {
238 return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);
239};
240
241var limitTimeRange = exports.limitTimeRange = function limitTimeRange(date, ranges) {
242 var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'HH:mm:ss';
243
244 // TODO: refactory a more elegant solution
245 if (ranges.length === 0) return date;
246 var normalizeDate = function normalizeDate(date) {
247 return _date2.default.parse(_date2.default.format(date, format), format);
248 };
249 var ndate = normalizeDate(date);
250 var nranges = ranges.map(function (range) {
251 return range.map(normalizeDate);
252 });
253 if (nranges.some(function (nrange) {
254 return ndate >= nrange[0] && ndate <= nrange[1];
255 })) return date;
256
257 var minDate = nranges[0][0];
258 var maxDate = nranges[0][0];
259
260 nranges.forEach(function (nrange) {
261 minDate = new Date(Math.min(nrange[0], minDate));
262 maxDate = new Date(Math.max(nrange[1], minDate));
263 });
264
265 var ret = ndate < minDate ? minDate : maxDate;
266 // preserve Year/Month/Date
267 return modifyDate(ret, date.getFullYear(), date.getMonth(), date.getDate());
268};
269
270var timeWithinRange = exports.timeWithinRange = function timeWithinRange(date, selectableRange, format) {
271 var limitedDate = limitTimeRange(date, selectableRange, format);
272 return limitedDate.getTime() === date.getTime();
273};
274
275var changeYearMonthAndClampDate = exports.changeYearMonthAndClampDate = function changeYearMonthAndClampDate(date, year, month) {
276 // clamp date to the number of days in `year`, `month`
277 // eg: (2010-1-31, 2010, 2) => 2010-2-28
278 var monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));
279 return modifyDate(date, year, month, monthDate);
280};
281
282var prevMonth = exports.prevMonth = function prevMonth(date) {
283 var year = date.getFullYear();
284 var month = date.getMonth();
285 return month === 0 ? changeYearMonthAndClampDate(date, year - 1, 11) : changeYearMonthAndClampDate(date, year, month - 1);
286};
287
288var nextMonth = exports.nextMonth = function nextMonth(date) {
289 var year = date.getFullYear();
290 var month = date.getMonth();
291 return month === 11 ? changeYearMonthAndClampDate(date, year + 1, 0) : changeYearMonthAndClampDate(date, year, month + 1);
292};
293
294var prevYear = exports.prevYear = function prevYear(date) {
295 var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
296
297 var year = date.getFullYear();
298 var month = date.getMonth();
299 return changeYearMonthAndClampDate(date, year - amount, month);
300};
301
302var nextYear = exports.nextYear = function nextYear(date) {
303 var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
304
305 var year = date.getFullYear();
306 var month = date.getMonth();
307 return changeYearMonthAndClampDate(date, year + amount, month);
308};
309
310var extractDateFormat = exports.extractDateFormat = function extractDateFormat(format) {
311 return format.replace(/\W?m{1,2}|\W?ZZ/g, '').replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, '').trim();
312};
313
314var extractTimeFormat = exports.extractTimeFormat = function extractTimeFormat(format) {
315 return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g, '').trim();
316};
317
318var validateRangeInOneMonth = exports.validateRangeInOneMonth = function validateRangeInOneMonth(start, end) {
319 return start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear();
320};
\No newline at end of file