#include <chrono>
#include <iostream>

template<typename T>
void print_time_diff(std::ostream& out, T prior, T latter)
{
    namespace sc = std::chrono;
    auto diff = sc::duration_cast<sc::milliseconds>(latter - prior).count();
    auto const msecs = diff % 1000;
   	diff /= 1000;
    auto const secs = diff % 60;
    diff /= 60;
    auto const mins = diff % 60;
    diff /= 60;
    auto const hours = diff % 24;
    diff /= 24;
    auto const days = diff;

	bool printed_earlier = false;
	if (days >= 1) {
		printed_earlier = true;
    	out << days << (1 != days ? " days" : " day") << ' ';
	}
	if (printed_earlier || hours >= 1) {
		printed_earlier = true;
        out << hours << (1 != hours ? " hours" : " hour") << ' ';
	}
	if (printed_earlier || mins >= 1) {
		printed_earlier = true;
        out << mins << (1 != mins ? " minutes" : " minute") << ' ';
	}
	if (printed_earlier || secs >= 1) {
		printed_earlier = true;
        out << secs << (1 != secs ? " seconds" : " second") << ' ';
	}
	if (printed_earlier || msecs >= 1) {
		printed_earlier = true;
		out << msecs << (1 != msecs ? " milliseconds" : " millisecond");
	}
}

int main()
{
	namespace sc = std::chrono;
	using hours = sc::hours;
	using mins = sc::minutes;
	using secs = sc::seconds;
	using msecs = sc::milliseconds;

	auto const prior = std::chrono::system_clock::now();
	auto const latter = prior + hours(24) + hours(4) + mins(3) + secs(45);
	print_time_diff(std::cout, prior, latter);
	std::cout << '\n';
	auto const latter2 = prior + mins(32) + secs(54) + msecs(345);
	print_time_diff(std::cout, prior, latter2);
}