Skip to content

Instantly share code, notes, and snippets.

@garethflowers
Last active May 3, 2021 21:33
Show Gist options
  • Select an option

  • Save garethflowers/5709457 to your computer and use it in GitHub Desktop.

Select an option

Save garethflowers/5709457 to your computer and use it in GitHub Desktop.
Returns a friendly human readble representation of how long ago a timestamp was.
CREATE OR REPLACE FUNCTION friendly_date_diff(
TIMESTAMP WITH TIME ZONE
)
RETURNS TEXT
LANGUAGE sql
IMMUTABLE
STRICT
AS $$
SELECT CASE
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '1 year'
THEN DATE_PART(' year', AGE( CURRENT_TIMESTAMP, $1 ) )::TEXT || ' years ago'
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '1 month'
THEN DATE_PART('month', AGE( CURRENT_TIMESTAMP, $1 ) )::TEXT || ' months ago'
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '7 day'
THEN FLOOR( DATE_PART( 'day', AGE( CURRENT_TIMESTAMP, $1 ) ) / 7 )::TEXT || ' weeks ago'
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '1 day'
THEN DATE_PART( 'day', AGE( CURRENT_TIMESTAMP, $1 ) )::TEXT || ' days ago'
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '1 hour'
THEN DATE_PART( 'hour', AGE( CURRENT_TIMESTAMP, $1 ) )::TEXT || ' hours ago'
WHEN AGE( CURRENT_TIMESTAMP, $1 ) > INTERVAL '1 min'
THEN DATE_PART( 'min', AGE( CURRENT_TIMESTAMP, $1 ) )::TEXT || ' mins ago'
ELSE 'just now'
END;
$$;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment