Format Relative Time

Medium Real-World Scenarios
Convert an elapsed number of seconds into a human phrase like "2 minutes ago" — used for chat and feed timestamps.

Sample input

3660

Sample output

1 hour ago

Solution

def relative_time(seconds):
    units = [("day", 86400), ("hour", 3600), ("minute", 60), ("second", 1)]
    for name, size in units:
        if seconds >= size:
            value = seconds // size
            plural = "s" if value != 1 else ""
            return f"{value} {name}{plural} ago"
    return "just now"

print(relative_time(3660))
function relativeTime(seconds) {
  const units = [["day", 86400], ["hour", 3600], ["minute", 60], ["second", 1]];
  for (const [name, size] of units) {
    if (seconds >= size) {
      const value = Math.floor(seconds / size);
      const plural = value !== 1 ? "s" : "";
      return `${value} ${name}${plural} ago`;
    }
  }
  return "just now";
}

console.log(relativeTime(3660));
public class Main {
    static String relativeTime(long seconds) {
        String[] names = {"day", "hour", "minute", "second"};
        long[] sizes = {86400, 3600, 60, 1};
        for (int i = 0; i < names.length; i++) {
            if (seconds >= sizes[i]) {
                long value = seconds / sizes[i];
                String plural = value != 1 ? "s" : "";
                return value + " " + names[i] + plural + " ago";
            }
        }
        return "just now";
    }

    public static void main(String[] args) {
        System.out.println(relativeTime(3660));
    }
}
fun relativeTime(seconds: Long): String {
    val units = listOf("day" to 86400L, "hour" to 3600L, "minute" to 60L, "second" to 1L)
    for ((name, size) in units) {
        if (seconds >= size) {
            val value = seconds / size
            val plural = if (value != 1L) "s" else ""
            return "$value $name$plural ago"
        }
    }
    return "just now"
}

fun main() {
    println(relativeTime(3660))
}
func relativeTime(_ seconds: Int) -> String {
    let units: [(String, Int)] = [("day", 86400), ("hour", 3600), ("minute", 60), ("second", 1)]
    for (name, size) in units {
        if seconds >= size {
            let value = seconds / size
            let plural = value != 1 ? "s" : ""
            return "\(value) \(name)\(plural) ago"
        }
    }
    return "just now"
}

print(relativeTime(3660))
String relativeTime(int seconds) {
  final units = [
    ['day', 86400],
    ['hour', 3600],
    ['minute', 60],
    ['second', 1],
  ];
  for (final u in units) {
    final size = u[1] as int;
    if (seconds >= size) {
      final value = seconds ~/ size;
      final plural = value != 1 ? 's' : '';
      return '$value ${u[0]}$plural ago';
    }
  }
  return 'just now';
}

void main() {
  print(relativeTime(3660));
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;

string relativeTime(long seconds) {
    vector<pair<string, long>> units = {{"day", 86400}, {"hour", 3600}, {"minute", 60}, {"second", 1}};
    for (auto& u : units) {
        if (seconds >= u.second) {
            long value = seconds / u.second;
            string plural = value != 1 ? "s" : "";
            return to_string(value) + " " + u.first + plural + " ago";
        }
    }
    return "just now";
}

int main() {
    cout << relativeTime(3660) << endl;
    return 0;
}
#include <stdio.h>

int main() {
    long seconds = 3660;
    const char *names[] = {"day", "hour", "minute", "second"};
    long sizes[] = {86400, 3600, 60, 1};
    for (int i = 0; i < 4; i++) {
        if (seconds >= sizes[i]) {
            long value = seconds / sizes[i];
            printf("%ld %s%s ago\n", value, names[i], value != 1 ? "s" : "");
            return 0;
        }
    }
    printf("just now\n");
    return 0;
}