Jump To …

time_format.coffee

TimeUtils = require './time_utils'

class TimeFormat
  _phrase = (identifier, quantity, direction) ->
    direction = if direction is 'future' then 'from now' else 'ago'
    s = if quantity > 1 then 's' else ''
    "#{quantity} #{identifier}#{s} #{direction}"

  constructor: (milliseconds) ->
    @milliseconds = milliseconds

  format: ->
    elapsed = Date.now() - @milliseconds
    direction = if elapsed < 0 then 'future' else 'past'
    elapsed = Math.abs(elapsed)

    if elapsed < TimeUtils.MINUTE_MS
      _phrase 'second', Math.round(elapsed / TimeUtils.SECOND_MS), direction
    else if elapsed < TimeUtils.HOUR_MS
      _phrase 'minute', Math.round(elapsed / TimeUtils.MINUTE_MS), direction
    else if elapsed < TimeUtils.DAY_MS
      _phrase 'hour', Math.round(elapsed / TimeUtils.HOUR_MS), direction
    else if elapsed < TimeUtils.WEEK_MS
      _phrase 'day', Math.round(elapsed / TimeUtils.DAY_MS), direction
    else if elapsed < TimeUtils.MONTH_MS
      _phrase 'week', Math.round(elapsed / TimeUtils.WEEK_MS), direction
    else if elapsed < TimeUtils.YEAR_MS
      _phrase 'month', Math.round(elapsed / TimeUtils.MONTH_MS), direction
    else
      _phrase 'year', Math.round(elapsed / TimeUtils.YEAR_MS), direction

module.exports = TimeFormat if module?