File size: 1,274 Bytes
246d201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**

 * Formats a date into a human-readable string representing the time delta between the given date and the current date.

 * @param date The date to format

 * @returns A human-readable string representing the time delta between the given date and the current date

 *

 * @example

 * // now is 2024-01-01T00:00:00Z

 * formatTimeDelta(new Date("2023-12-31T23:59:59Z")); // "1 second"

 * formatTimeDelta(new Date("2022-01-01T00:00:00Z")); // "2 years"

 */
export const formatTimeDelta = (date: Date) => {
  const now = new Date();
  const delta = now.getTime() - date.getTime();

  const seconds = Math.floor(delta / 1000);
  const minutes = Math.floor(seconds / 60);
  const hours = Math.floor(minutes / 60);
  const days = Math.floor(hours / 24);
  const months = Math.floor(days / 30);
  const years = Math.floor(months / 12);

  if (seconds < 60) return seconds === 1 ? "1 second" : `${seconds} seconds`;
  if (minutes < 60) return minutes === 1 ? "1 minute" : `${minutes} minutes`;
  if (hours < 24) return hours === 1 ? "1 hour" : `${hours} hours`;
  if (days < 30) return days === 1 ? "1 day" : `${days} days`;
  if (months < 12) return months === 1 ? "1 month" : `${months} months`;

  return years === 1 ? "1 year" : `${years} years`;
};