Skip to content

Commit

Permalink
Added dayjs package
Browse files Browse the repository at this point in the history
  • Loading branch information
jeemok committed Jul 11, 2021
1 parent b1b05ff commit 15ae9ad
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 10 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- Updated declaration file extension so it will not be included in final build
- Added multiple date format support for `expiry` field
- Added `dayjs` package

## 3.0.1 (July 11, 2021)

Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
},
"dependencies": {
"commander": "^8.0.0",
"dayjs": "^1.10.6",
"lodash.get": "^4.4.2",
"table": "^6.7.1"
},
Expand Down
3 changes: 3 additions & 0 deletions src/types/date.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
export type DateAnalysis = {
valid: boolean;
expired?: boolean;
days?: number;
months?: number;
years?: number;
};
10 changes: 9 additions & 1 deletion src/utils/date.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import dayjs from 'dayjs';
import { DateAnalysis } from 'src/types';

/**
Expand All @@ -19,11 +20,18 @@ export function analyzeExpiry(expiry?: string | number, now: string | number = n
if (!expiry) {
return { valid: true };
}

if (!isValidDate(expiry) || !isValidDate(now)) {
return { valid: false };
}

const dayjsNow = dayjs(now);

return {
valid: true,
expired: new Date(now).getTime() > new Date(expiry).getTime(),
expired: dayjsNow.isAfter(expiry),
days: dayjsNow.diff(expiry, 'days'),
months: dayjsNow.diff(expiry, 'months'),
years: dayjsNow.diff(expiry, 'years'),
};
}
45 changes: 36 additions & 9 deletions test/utils/date.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,46 @@ describe('Date utils', () => {

it('should be able to analyze the given timestamp correctly', () => {
// Only dates
expect(analyzeExpiry('2020-01-31', '2020-01-01')).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry('2020-01-31', '2020-01-31')).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry('2020-01-31', '2020-02-02')).to.deep.equal({ valid: true, expired: true });
expect(analyzeExpiry('2020-01-31', '2020-01-01')).to.deep.equal({ valid: true, expired: false, days: -30, months: 0, years: 0 });
expect(analyzeExpiry('2020-01-31', '2020-01-31')).to.deep.equal({ valid: true, expired: false, days: 0, months: 0, years: 0 });
expect(analyzeExpiry('2020-01-31', '2020-02-02')).to.deep.equal({ valid: true, expired: true, days: 2, months: 0, years: 0 });

// Dates & time
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 2:59:00 pm')).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 3:00:00 pm')).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 3:00:01 pm')).to.deep.equal({ valid: true, expired: true });
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 2:59:00 pm')).to.deep.equal({
valid: true,
expired: false,
days: 0,
months: 0,
years: 0,
});
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 3:00:00 pm')).to.deep.equal({
valid: true,
expired: false,
days: 0,
months: 0,
years: 0,
});
expect(analyzeExpiry('1 March 2020 3:00 pm', '1 March 2020 3:00:01 pm')).to.deep.equal({
valid: true,
expired: true,
days: 0,
months: 0,
years: 0,
});

// Milliseconds
expect(analyzeExpiry(1327611110410, 1327611110409)).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry(1327611110410, 1327611110410)).to.deep.equal({ valid: true, expired: false });
expect(analyzeExpiry(1327611110410, 1327611110411)).to.deep.equal({ valid: true, expired: true });
expect(analyzeExpiry(1327611110410, 1327611110409)).to.deep.equal({ valid: true, expired: false, days: 0, months: 0, years: 0 });
expect(analyzeExpiry(1327611110410, 1327611110410)).to.deep.equal({ valid: true, expired: false, days: 0, months: 0, years: 0 });
expect(analyzeExpiry(1327611110410, 1327611110411)).to.deep.equal({ valid: true, expired: true, days: 0, months: 0, years: 0 });
});

it('should be able to analyze the time difference correctly', () => {
expect(analyzeExpiry('2020-01-31', '2020-01-01')).to.deep.equal({ valid: true, expired: false, days: -30, months: 0, years: 0 });
expect(analyzeExpiry('2020-01-31', '2020-02-02')).to.deep.equal({ valid: true, expired: true, days: 2, months: 0, years: 0 });
expect(analyzeExpiry('2020-01-31', '2020-03-01')).to.deep.equal({ valid: true, expired: true, days: 30, months: 1, years: 0 });
expect(analyzeExpiry('2020-01-31', '2021-01-01')).to.deep.equal({ valid: true, expired: true, days: 336, months: 11, years: 0 });
expect(analyzeExpiry('2020-01-31', '2021-01-31')).to.deep.equal({ valid: true, expired: true, days: 366, months: 12, years: 1 });
expect(analyzeExpiry('2020-01-31', '2025-10-10')).to.deep.equal({ valid: true, expired: true, days: 2079, months: 68, years: 5 });
});
});
});

0 comments on commit 15ae9ad

Please sign in to comment.