@my-devkit/core 1.0.119 → 1.0.120
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.
- package/dist/date-helper.d.ts +1 -0
- package/dist/date-helper.js +54 -0
- package/dist/date-helper.js.map +1 -1
- package/package.json +1 -1
- package/src/date-helper.ts +65 -1
package/dist/date-helper.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare class DateHelper {
|
|
|
16
16
|
static addMiliseconds(startDate: Date, numberOfMiliseconds: number): Date;
|
|
17
17
|
static getDay(date: Date): string;
|
|
18
18
|
static getMilitaryTime(date: Date): string;
|
|
19
|
+
static toHumanReadableDate(date: Date): string;
|
|
19
20
|
}
|
|
20
21
|
export declare namespace DateHelper {
|
|
21
22
|
type Format = 'year' | 'quarter' | 'month';
|
package/dist/date-helper.js
CHANGED
|
@@ -106,6 +106,60 @@ class DateHelper {
|
|
|
106
106
|
const minute = date.getMinutes();
|
|
107
107
|
return `${('00' + hours).slice(-2)}:${('00' + minute).slice(-2)}`;
|
|
108
108
|
}
|
|
109
|
+
static toHumanReadableDate(date) {
|
|
110
|
+
const reference = new Date();
|
|
111
|
+
const startOfDay = (d) => new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
112
|
+
const oneSecMs = 1000;
|
|
113
|
+
const oneMinMs = 60 * oneSecMs;
|
|
114
|
+
const oneHourMs = 60 * oneMinMs;
|
|
115
|
+
const oneDayMs = 24 * oneHourMs;
|
|
116
|
+
const diffDays = Math.floor((startOfDay(reference).getTime() - startOfDay(date).getTime()) / oneDayMs);
|
|
117
|
+
const diffMs = reference.getTime() - date.getTime();
|
|
118
|
+
const isFuture = diffMs < 0;
|
|
119
|
+
const absoluteDiffMs = Math.abs(diffMs);
|
|
120
|
+
const seconds = Math.floor((absoluteDiffMs / 1000) % 60);
|
|
121
|
+
const minutes = Math.floor((absoluteDiffMs / (1000 * 60)) % 60);
|
|
122
|
+
const hours = Math.floor((absoluteDiffMs / (1000 * 60 * 60)) % 24);
|
|
123
|
+
const relativeTime = (0, vendors_1._compact)([
|
|
124
|
+
hours > 0 ? `${hours} hour${hours > 1 ? 's' : ''}` : null,
|
|
125
|
+
minutes > 0 ? `${minutes} min${minutes > 1 ? 's' : ''}` : null,
|
|
126
|
+
seconds > 0 && hours === 0 && minutes === 0 ? `${seconds} sec${seconds > 1 ? 's' : ''}` : null,
|
|
127
|
+
]).slice(0, 2).join(', ');
|
|
128
|
+
const timeFormatter = new Intl.DateTimeFormat("en-GB", {
|
|
129
|
+
hour: "numeric",
|
|
130
|
+
minute: "2-digit",
|
|
131
|
+
hour12: false,
|
|
132
|
+
});
|
|
133
|
+
const fullDateFormatter = new Intl.DateTimeFormat("en-GB", {
|
|
134
|
+
year: "numeric",
|
|
135
|
+
month: "short",
|
|
136
|
+
day: "numeric",
|
|
137
|
+
hour: "numeric",
|
|
138
|
+
minute: "2-digit",
|
|
139
|
+
hour12: false
|
|
140
|
+
});
|
|
141
|
+
const weekday = new Intl.DateTimeFormat("en-GB", { weekday: "long" }).format(date);
|
|
142
|
+
switch (true) {
|
|
143
|
+
case absoluteDiffMs < oneSecMs:
|
|
144
|
+
return `Just now`;
|
|
145
|
+
case isFuture && absoluteDiffMs < 3 * oneHourMs:
|
|
146
|
+
return `In ${relativeTime} from now`;
|
|
147
|
+
case !isFuture && absoluteDiffMs < 3 * oneHourMs:
|
|
148
|
+
return `${relativeTime} ago`;
|
|
149
|
+
case diffDays === 0:
|
|
150
|
+
return `Today at ${timeFormatter.format(date)}`;
|
|
151
|
+
case diffDays === 1:
|
|
152
|
+
return `Yesterday at ${timeFormatter.format(date)}`;
|
|
153
|
+
case diffDays === -1:
|
|
154
|
+
return `Tomorrow at ${timeFormatter.format(date)}`;
|
|
155
|
+
case diffDays > 1 && diffDays < 7:
|
|
156
|
+
return `Last ${weekday} at ${timeFormatter.format(date)}`;
|
|
157
|
+
case diffDays < -1 && diffDays > -7:
|
|
158
|
+
return `Next ${weekday} at ${timeFormatter.format(date)}`;
|
|
159
|
+
default:
|
|
160
|
+
return fullDateFormatter.format(date);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
109
163
|
}
|
|
110
164
|
exports.DateHelper = DateHelper;
|
|
111
165
|
//# sourceMappingURL=date-helper.js.map
|
package/dist/date-helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-helper.js","sourceRoot":"","sources":["../src/date-helper.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"date-helper.js","sourceRoot":"","sources":["../src/date-helper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/date-helper.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _sumBy } from './vendors';
|
|
1
|
+
import { _compact, _sumBy } from './vendors';
|
|
2
2
|
|
|
3
3
|
export class DateHelper {
|
|
4
4
|
public static getUTCTimestamp(): number {
|
|
@@ -166,6 +166,70 @@ export class DateHelper {
|
|
|
166
166
|
|
|
167
167
|
return `${('00' + hours).slice(-2)}:${('00' + minute).slice(-2)}`;
|
|
168
168
|
}
|
|
169
|
+
|
|
170
|
+
public static toHumanReadableDate(date: Date): string {
|
|
171
|
+
const reference = new Date();
|
|
172
|
+
|
|
173
|
+
const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
174
|
+
|
|
175
|
+
const oneSecMs = 1000;
|
|
176
|
+
const oneMinMs = 60 * oneSecMs;
|
|
177
|
+
const oneHourMs = 60 * oneMinMs;
|
|
178
|
+
const oneDayMs = 24 * oneHourMs;
|
|
179
|
+
|
|
180
|
+
const diffDays = Math.floor((startOfDay(reference).getTime() - startOfDay(date).getTime()) / oneDayMs);
|
|
181
|
+
|
|
182
|
+
const diffMs = reference.getTime() - date.getTime();
|
|
183
|
+
|
|
184
|
+
const isFuture = diffMs < 0;
|
|
185
|
+
const absoluteDiffMs = Math.abs(diffMs);
|
|
186
|
+
const seconds = Math.floor((absoluteDiffMs / 1000) % 60);
|
|
187
|
+
const minutes = Math.floor((absoluteDiffMs / (1000 * 60)) % 60);
|
|
188
|
+
const hours = Math.floor((absoluteDiffMs / (1000 * 60 * 60)) % 24);
|
|
189
|
+
|
|
190
|
+
const relativeTime = _compact([
|
|
191
|
+
hours > 0 ? `${hours} hour${hours > 1 ? 's' : ''}` : null,
|
|
192
|
+
minutes > 0 ? `${minutes} min${minutes > 1 ? 's' : ''}` : null,
|
|
193
|
+
seconds > 0 && hours === 0 && minutes === 0 ? `${seconds} sec${seconds > 1 ? 's' : ''}` : null,
|
|
194
|
+
]).slice(0, 2).join(', ');
|
|
195
|
+
|
|
196
|
+
const timeFormatter = new Intl.DateTimeFormat("en-GB", {
|
|
197
|
+
hour: "numeric",
|
|
198
|
+
minute: "2-digit",
|
|
199
|
+
hour12: false,
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const fullDateFormatter = new Intl.DateTimeFormat("en-GB", {
|
|
203
|
+
year: "numeric",
|
|
204
|
+
month: "short",
|
|
205
|
+
day: "numeric",
|
|
206
|
+
hour: "numeric",
|
|
207
|
+
minute: "2-digit",
|
|
208
|
+
hour12: false
|
|
209
|
+
});
|
|
210
|
+
const weekday = new Intl.DateTimeFormat("en-GB", { weekday: "long" }).format(date);
|
|
211
|
+
|
|
212
|
+
switch (true) {
|
|
213
|
+
case absoluteDiffMs < oneSecMs:
|
|
214
|
+
return `Just now`;
|
|
215
|
+
case isFuture && absoluteDiffMs < 3 * oneHourMs:
|
|
216
|
+
return `In ${relativeTime} from now`;
|
|
217
|
+
case !isFuture && absoluteDiffMs < 3 * oneHourMs:
|
|
218
|
+
return `${relativeTime} ago`;
|
|
219
|
+
case diffDays === 0:
|
|
220
|
+
return `Today at ${timeFormatter.format(date)}`;
|
|
221
|
+
case diffDays === 1:
|
|
222
|
+
return `Yesterday at ${timeFormatter.format(date)}`;
|
|
223
|
+
case diffDays === -1:
|
|
224
|
+
return `Tomorrow at ${timeFormatter.format(date)}`;
|
|
225
|
+
case diffDays > 1 && diffDays < 7:
|
|
226
|
+
return `Last ${weekday} at ${timeFormatter.format(date)}`;
|
|
227
|
+
case diffDays < -1 && diffDays > -7:
|
|
228
|
+
return `Next ${weekday} at ${timeFormatter.format(date)}`;
|
|
229
|
+
default:
|
|
230
|
+
return fullDateFormatter.format(date);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
169
233
|
}
|
|
170
234
|
|
|
171
235
|
export namespace DateHelper {
|