@uiowa/date-range-picker
Version:
An Angular library for date range picker.
156 lines • 13.7 kB
JavaScript
/**
* DateRange Type represents start date and end date.
*/
export class DateRange {
/**
* Examples:
```typescript
const d1 = new DateRange();
const d2 = new DateRange(new Date(), new Date(2018, 9, 10));
```
* @param start [Optional] Start Date. Default: null.
* @param end [Optional] End Date. Default: null
*/
constructor(start = null, end = null) {
this.start = start;
this.end = end;
}
/**
* Examples:
```typescript
const d1 = DateRange.nextDays(7);
// a date range of next week since today
```
* @param n Number of days after today.
*/
static nextDays(n) {
const start = new Date();
const end = new Date();
end.setDate(end.getDate() + n);
return new DateRange(start, end);
}
/**
* Examples:
```typescript
const d1 = DateRange.lastDays(7);
// a date range of a week before today
```
* @param n Number of days before today.
*/
static lastDays(n) {
const start = new Date();
start.setDate(start.getDate() - n);
const end = new Date();
return new DateRange(start, end);
}
/**
* Examples:
```typescript
const d1 = DateRange.nextTwoWeeks();
// a date range of next two weeks since today
```
*/
static nextTwoWeeks() {
return DateRange.nextDays(14);
}
/**
* Examples:
```typescript
const d1 = DateRange.nextMonth();
// a date range of next month since today
```
*/
static nextMonth() {
const start = new Date();
const end = new Date();
end.setMonth(end.getMonth() + 1);
return new DateRange(start, end);
}
/**
* Examples:
```typescript
const d1 = DateRange.lastMonth();
// a date range of last month till today
```
*/
static lastMonth() {
const start = new Date();
const end = new Date();
start.setMonth(start.getMonth() - 1);
return new DateRange(start, end);
}
/**
* Examples:
```typescript
const d1 = DateRange.create({});
```
* @param start start date of range you're creating
* @param end end date of range you're creating
*/
static create(start, end) {
let startDate = null;
let endDate = null;
if (DateRange.isValidDate(start)) {
startDate = new Date(start);
}
if (DateRange.isValidDate(end)) {
endDate = new Date(end);
}
return new DateRange(startDate, endDate);
}
/**
* Examples:
```typescript
const isValid = DateRange.isValidDate(new Date());
```
* @param value date you want to verify as date
*/
static isValidDate(value) {
if (!value) {
return false;
}
switch (typeof value) {
case 'number':
return true;
case 'string':
return !isNaN(Date.parse(value));
default:
if (value instanceof Date) {
return !isNaN(value.getTime());
}
return false;
}
}
/**
* Examples:
```typescript
const a = new DateRange();
const isEqual = a.equals(new DateRange());
```
* @param dateRange another DateRange object
*/
equals(dateRange) {
if (!dateRange) {
return false;
}
return (DateRange.dateEqual(dateRange.start, this.start) &&
DateRange.dateEqual(dateRange.end, this.end));
}
/**
*
* @param date1 a Date object or NULL
* @param date2 a Date object or NULL
*/
static dateEqual(date1, date2) {
if (date1 === null) {
return date2 === null;
}
else if (date2 === null) {
return false;
}
const d1 = date1 instanceof Date ? date1 : new Date(date1);
const d2 = date2 instanceof Date ? date2 : new Date(date2);
return d1.toLocaleDateString() === d2.toLocaleDateString();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Vpb3dhL2RhdGUtcmFuZ2UtcGlja2VyL3NyYy9saWIvbW9kZWxzL2RhdGUtcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQjs7Ozs7Ozs7T0FRRztJQUNILFlBQ1MsUUFBcUIsSUFBSSxFQUN6QixNQUFtQixJQUFJO1FBRHZCLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQW9CO0lBQzdCLENBQUM7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFTO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBUztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2pCLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxF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QUFNLEVBQUUsR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIERhdGVSYW5nZSBUeXBlIHJlcHJlc2VudHMgc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlIHtcclxuICAvKipcclxuICAgKiBFeGFtcGxlczpcclxuIGBgYHR5cGVzY3JpcHRcclxuY29uc3QgZDEgPSBuZXcgRGF0ZVJhbmdlKCk7XHJcbmNvbnN0IGQyID0gbmV3IERhdGVSYW5nZShuZXcgRGF0ZSgpLCBuZXcgRGF0ZSgyMDE4LCA5LCAxMCkpO1xyXG4gYGBgXHJcbiAgICogQHBhcmFtIHN0YXJ0IFtPcHRpb25hbF0gU3RhcnQgRGF0ZS4gRGVmYXVsdDogbnVsbC5cclxuICAgKiBAcGFyYW0gZW5kIFtPcHRpb25hbF0gRW5kIERhdGUuIERlZmF1bHQ6IG51bGxcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzdGFydDogRGF0ZSB8IG51bGwgPSBudWxsLFxyXG4gICAgcHVibGljIGVuZDogRGF0ZSB8IG51bGwgPSBudWxsXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGFtcGxlczpcclxuIGBgYHR5cGVzY3JpcHRcclxuY29uc3QgZDEgPSBEYXRlUmFuZ2UubmV4dERheXMoNyk7XHJcbi8vIGEgZGF0ZSByYW5nZSBvZiBuZXh0IHdlZWsgc2luY2UgdG9kYXlcclxuIGBgYFxyXG4gICAqIEBwYXJhbSBuIE51bWJlciBvZiBkYXlzIGFmdGVyIHRvZGF5LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBuZXh0RGF5cyhuOiBudW1iZXIpOiBEYXRlUmFuZ2Uge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcclxuICAgIGVuZC5zZXREYXRlKGVuZC5nZXREYXRlKCkgKyBuKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhhbXBsZXM6XHJcbiBgYGB0eXBlc2NyaXB0XHJcbmNvbnN0IGQxID0gRGF0ZVJhbmdlLmxhc3REYXlzKDcpO1xyXG4vLyBhIGRhdGUgcmFuZ2Ugb2YgYSB3ZWVrIGJlZm9yZSB0b2RheVxyXG4gYGBgXHJcbiAgICogQHBhcmFtIG4gTnVtYmVyIG9mIGRheXMgYmVmb3JlIHRvZGF5LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsYXN0RGF5cyhuOiBudW1iZXIpOiBEYXRlUmFuZ2Uge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSBuKTtcclxuICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gbmV3IERhdGVSYW5nZShzdGFydCwgZW5kKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4YW1wbGVzOlxyXG4gYGBgdHlwZXNjcmlwdFxyXG5jb25zdCBkMSA9IERhdGVSYW5nZS5uZXh0VHdvV2Vla3MoKTtcclxuLy8gYSBkYXRlIHJhbmdlIG9mIG5leHQgdHdvIHdlZWtzIHNpbmNlIHRvZGF5XHJcbiBgYGBcclxuICAgKi9cclxuICBzdGF0aWMgbmV4dFR3b1dlZWtzKCk6IERhdGVSYW5nZSB7XHJcbiAgICByZXR1cm4gRGF0ZVJhbmdlLm5leHREYXlzKDE0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4YW1wbGVzOlxyXG4gYGBgdHlwZXNjcmlwdFxyXG5jb25zdCBkMSA9IERhdGVSYW5nZS5uZXh0TW9udGgoKTtcclxuLy8gYSBkYXRlIHJhbmdlIG9mIG5leHQgbW9udGggc2luY2UgdG9kYXlcclxuIGBgYFxyXG4gICAqL1xyXG4gIHN0YXRpYyBuZXh0TW9udGgoKTogRGF0ZVJhbmdlIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCk7XHJcbiAgICBlbmQuc2V0TW9udGgoZW5kLmdldE1vbnRoKCkgKyAxKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhhbXBsZXM6XHJcbiBgYGB0eXBlc2NyaXB0XHJcbmNvbnN0IGQxID0gRGF0ZVJhbmdlLmxhc3RNb250aCgpO1xyXG4vLyBhIGRhdGUgcmFuZ2Ugb2YgbGFzdCBtb250aCB0aWxsIHRvZGF5XHJcbiBgYGBcclxuICAgKi9cclxuICBzdGF0aWMgbGFzdE1vbnRoKCk6IERhdGVSYW5nZSB7XHJcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgc3RhcnQuc2V0TW9udGgoc3RhcnQuZ2V0TW9udGgoKSAtIDEpO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlUmFuZ2Uoc3RhcnQsIGVuZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGFtcGxlczpcclxuIGBgYHR5cGVzY3JpcHRcclxuY29uc3QgZDEgPSBEYXRlUmFuZ2UuY3JlYXRlKHt9KTtcclxuIGBgYFxyXG4gICAqIEBwYXJhbSBzdGFydCBzdGFydCBkYXRlIG9mIHJhbmdlIHlvdSdyZSBjcmVhdGluZ1xyXG4gICAqIEBwYXJhbSBlbmQgZW5kIGRhdGUgb2YgcmFuZ2UgeW91J3JlIGNyZWF0aW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGNyZWF0ZShzdGFydDogYW55LCBlbmQ6IGFueSk6IERhdGVSYW5nZSB7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gbnVsbDtcclxuICAgIGxldCBlbmREYXRlID0gbnVsbDtcclxuICAgIGlmIChEYXRlUmFuZ2UuaXNWYWxpZERhdGUoc3RhcnQpKSB7XHJcbiAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KTtcclxuICAgIH1cclxuICAgIGlmIChEYXRlUmFuZ2UuaXNWYWxpZERhdGUoZW5kKSkge1xyXG4gICAgICBlbmREYXRlID0gbmV3IERhdGUoZW5kKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZVJhbmdlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGFtcGxlczpcclxuIGBgYHR5cGVzY3JpcHRcclxuY29uc3QgaXNWYWxpZCA9IERhdGVSYW5nZS5pc1ZhbGlkRGF0ZShuZXcgRGF0ZSgpKTtcclxuIGBgYFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBkYXRlIHlvdSB3YW50IHRvIHZlcmlmeSBhcyBkYXRlXHJcbiAgICovXHJcbiAgc3RhdGljIGlzVmFsaWREYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGFtcGxlczpcclxuIGBgYHR5cGVzY3JpcHRcclxuY29uc3QgYSA9IG5ldyBEYXRlUmFuZ2UoKTtcclxuY29uc3QgaXNFcXVhbCA9IGEuZXF1YWxzKG5ldyBEYXRlUmFuZ2UoKSk7XHJcbiBgYGBcclxuICAgKiBAcGFyYW0gZGF0ZVJhbmdlIGFub3RoZXIgRGF0ZVJhbmdlIG9iamVjdFxyXG4gICAqL1xyXG4gIGVxdWFscyhkYXRlUmFuZ2U6IERhdGVSYW5nZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRlUmFuZ2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgRGF0ZVJhbmdlLmRhdGVFcXVhbChkYXRlUmFuZ2Uuc3RhcnQsIHRoaXMuc3RhcnQpICYmXHJcbiAgICAgIERhdGVSYW5nZS5kYXRlRXF1YWwoZGF0ZVJhbmdlLmVuZCwgdGhpcy5lbmQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGF0ZTEgYSBEYXRlIG9iamVjdCBvciBOVUxMXHJcbiAgICogQHBhcmFtIGRhdGUyIGEgRGF0ZSBvYmplY3Qgb3IgTlVMTFxyXG4gICAqL1xyXG4gIHN0YXRpYyBkYXRlRXF1YWwoZGF0ZTE6IERhdGUgfCBudWxsLCBkYXRlMjogRGF0ZSB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIGlmIChkYXRlMSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZGF0ZTIgPT09IG51bGw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGUyID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkMSA9IGRhdGUxIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGUxIDogbmV3IERhdGUoZGF0ZTEpO1xyXG4gICAgY29uc3QgZDIgPSBkYXRlMiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlMiA6IG5ldyBEYXRlKGRhdGUyKTtcclxuICAgIHJldHVybiBkMS50b0xvY2FsZURhdGVTdHJpbmcoKSA9PT0gZDIudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==