Skip to content

Commit fd1647a

Browse files
committed
feat(Days Calculator): add more diff (days, weeks...minutes)
Fix CorentinTh#1449
1 parent 77b6b39 commit fd1647a

File tree

3 files changed

+58
-7
lines changed

3 files changed

+58
-7
lines changed

src/tools/days-calculator/days-calculator.service.test.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ describe('days-calculator', () => {
6565
type: 'public',
6666
},
6767
];
68+
const totalDiff1 = {
69+
totalDifference: {
70+
days: 30.416666666666668,
71+
hours: 730,
72+
minutes: 43800,
73+
months: 0.9811827956989247,
74+
seconds: 2628000,
75+
weeks: 4.345238095238095,
76+
years: 0.08333333333333333,
77+
},
78+
};
6879

6980
const date1 = new Date('2024-08-01T07:21:46Z');
7081
const date2 = new Date('2024-08-31T17:21:46Z');
@@ -88,8 +99,8 @@ describe('days-calculator', () => {
8899
businessSecondsFormatted: '11d 5h 38m 14s',
89100
differenceFormatted: '29d 10h',
90101
differenceSeconds: 2541600,
102+
...totalDiff1,
91103
totalDifferenceFormatted: '30d 10h',
92-
totalDifferenceSeconds: 2628000,
93104
holidays,
94105
...daysInfos,
95106
});
@@ -112,8 +123,16 @@ describe('days-calculator', () => {
112123
businessSecondsFormatted: '10d 20h 38m 14.9s',
113124
differenceFormatted: '28d 16h 38m 13.9s',
114125
differenceSeconds: 2479093.999,
126+
totalDifference: {
127+
days: 29.69321758101852,
128+
hours: 712.6372219444445,
129+
minutes: 42758.233316666665,
130+
months: 0.9578457284199522,
131+
seconds: 2565493.999,
132+
weeks: 4.241888225859788,
133+
years: 0.08135128104388635,
134+
},
115135
totalDifferenceFormatted: '29d 16h 38m 13.9s',
116-
totalDifferenceSeconds: 2565493.999,
117136
holidays,
118137
...daysInfos,
119138
saturdays: [
@@ -142,8 +161,8 @@ describe('days-calculator', () => {
142161
businessSecondsFormatted: '8d 5h 38m 14s',
143162
differenceFormatted: '21d 14h 38m 14s',
144163
differenceSeconds: 1867094,
164+
...totalDiff1,
145165
totalDifferenceFormatted: '30d 10h',
146-
totalDifferenceSeconds: 2628000,
147166
holidays,
148167
...daysInfos,
149168
});
@@ -167,7 +186,7 @@ describe('days-calculator', () => {
167186
differenceFormatted: '4d',
168187
differenceSeconds: 345600,
169188
totalDifferenceFormatted: '30d 10h',
170-
totalDifferenceSeconds: 2628000,
189+
...totalDiff1,
171190
holidays,
172191
...daysInfos,
173192
});

src/tools/days-calculator/days-calculator.service.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@ import { BusinessTime, type Holiday } from './business-time-calculator';
77
interface DateTimeRange {
88
startDate: Date
99
endDate: Date
10-
totalDifferenceSeconds: number
10+
totalDifference: {
11+
years: number
12+
months: number
13+
weeks: number
14+
days: number
15+
hours: number
16+
minutes: number
17+
seconds: number
18+
}
1119
totalDifferenceFormatted: string
1220
differenceSeconds: number
1321
differenceFormatted: string
@@ -96,14 +104,28 @@ export function diffDateTimes({
96104
const startEnd = { start: startDateTime, end: endDateTime };
97105

98106
const totalDifferenceSeconds = endDateTime.diff(startDateTime, 'seconds').toObject().seconds || 0;
107+
const totalDifferenceMinutes = endDateTime.diff(startDateTime, 'minutes').toObject().minutes || 0;
108+
const totalDifferenceHours = endDateTime.diff(startDateTime, 'hours').toObject().hours || 0;
109+
const totalDifferenceDays = endDateTime.diff(startDateTime, 'days').toObject().days || 0;
110+
const totalDifferenceWeeks = endDateTime.diff(startDateTime, 'weeks').toObject().weeks || 0;
111+
const totalDifferenceMonths = endDateTime.diff(startDateTime, 'months').toObject().months || 0;
112+
const totalDifferenceYears = endDateTime.diff(startDateTime, 'years').toObject().years || 0;
99113
const differenceSeconds = differenceTimeComputer.computeBusinessSecondsInInterval(startEnd);
100114
const businessSeconds = businessTimeComputer.computeBusinessSecondsInInterval(startEnd);
101115
const weekDaysDates = datesByDays(startDateTime, endDateTime);
102116
const weekendDays = countCertainDays([6, 0], date1, date2);
103117
return {
104118
startDate: startDateTime.toJSDate(),
105119
endDate: endDateTime.toJSDate(),
106-
totalDifferenceSeconds,
120+
totalDifference: {
121+
years: totalDifferenceYears,
122+
months: totalDifferenceMonths,
123+
weeks: totalDifferenceWeeks,
124+
days: totalDifferenceDays,
125+
hours: totalDifferenceHours,
126+
minutes: totalDifferenceMinutes,
127+
seconds: totalDifferenceSeconds,
128+
},
107129
totalDifferenceFormatted: prettyMilliseconds(totalDifferenceSeconds * 1000),
108130
differenceSeconds,
109131
differenceFormatted: prettyMilliseconds(differenceSeconds * 1000),

src/tools/days-calculator/days-calculator.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,21 +146,31 @@ const inputProps = {
146146
<input-copyable v-bind="inputProps" label="End Date" :value="resultDaysDiff.endDate" />
147147
<input-copyable v-bind="inputProps" label="End Date (ISO)" :value="resultDaysDiff.endDate.toISOString()" />
148148
<n-divider />
149-
<input-copyable v-bind="inputProps" label="Total Difference Seconds" :value="resultDaysDiff.totalDifferenceSeconds" />
149+
<input-copyable v-bind="inputProps" label="Total Difference Seconds" :value="resultDaysDiff.totalDifference.seconds" />
150+
<input-copyable v-bind="inputProps" label="Total Difference Minutes" :value="resultDaysDiff.totalDifference.minutes" />
151+
<input-copyable v-bind="inputProps" label="Total Difference Hours" :value="resultDaysDiff.totalDifference.hours" />
152+
<input-copyable v-bind="inputProps" label="Total Difference Days" :value="resultDaysDiff.totalDifference.days" />
153+
<input-copyable v-bind="inputProps" label="Total Difference Weeks" :value="resultDaysDiff.totalDifference.weeks" />
154+
<input-copyable v-bind="inputProps" label="Total Difference Months" :value="resultDaysDiff.totalDifference.months" />
155+
<input-copyable v-bind="inputProps" label="Total Difference Years" :value="resultDaysDiff.totalDifference.years" />
150156
<input-copyable v-bind="inputProps" label="Total Difference" :value="resultDaysDiff.totalDifferenceFormatted" />
157+
<n-divider />
151158
<input-copyable v-bind="inputProps" label="Difference Seconds" :value="resultDaysDiff.differenceSeconds" />
152159
<input-copyable v-bind="inputProps" label="Difference " :value="resultDaysDiff.differenceFormatted" />
160+
<n-divider />
153161
<input-copyable v-bind="inputProps" label="Business Seconds" :value="resultDaysDiff.businessSeconds" />
154162
<input-copyable v-bind="inputProps" label="Business Time" :value="resultDaysDiff.businessSecondsFormatted" />
155163
<input-copyable v-bind="inputProps" label="Business Hours" :value="resultDaysDiff.businessHours" />
156164
<input-copyable v-bind="inputProps" label="Business Days" :value="resultDaysDiff.businessDays" />
165+
<n-divider />
157166
<input-copyable v-bind="inputProps" placeholder="None" label="Mondays" :value="resultDaysDiff.mondays" />
158167
<input-copyable v-bind="inputProps" placeholder="None" label="Tuesdays" :value="resultDaysDiff.tuesdays" />
159168
<input-copyable v-bind="inputProps" placeholder="None" label="Wednesdays" :value="resultDaysDiff.wednesdays" />
160169
<input-copyable v-bind="inputProps" placeholder="None" label="Thursdays" :value="resultDaysDiff.thursdays" />
161170
<input-copyable v-bind="inputProps" placeholder="None" label="Fridays" :value="resultDaysDiff.fridays" />
162171
<input-copyable v-bind="inputProps" placeholder="None" label="Saturdays" :value="resultDaysDiff.saturdays" />
163172
<input-copyable v-bind="inputProps" placeholder="None" label="Sundays" :value="resultDaysDiff.sundays" />
173+
<n-divider />
164174
<input-copyable v-bind="inputProps" label="Weekend Days" :value="resultDaysDiff.weekendDays" />
165175
<input-copyable v-bind="inputProps" label="Full Weekends" :value="resultDaysDiff.weekends" />
166176
<c-card v-if="resultDaysDiff.holidays?.length" title="Holidays in period">

0 commit comments

Comments
 (0)