Sha256: d4df7741f5344fa8357366c6fbbf22d9a53e5d5006ffd9da5a7ee7fba5ade2c5

Contents?: true

Size: 1.92 KB

Versions: 18

Compression:

Stored size: 1.92 KB

Contents

class window.Duration
  constructor: (@n, @units)->
  after:  (date)-> date && Duration.transformDateBy(date, +@n, @units)
  before: (date)-> date && Duration.transformDateBy(date, -@n, @units)
  ago: -> @before(new Date())
  fromNow: -> @after(new Date())
  valueOf: ->
    switch @units
      when 'minutes' then @n * Duration.MINUTE
      when 'hours' then @n * Duration.HOUR
      when 'days' then @n * Duration.DAY
      when 'weeks' then @n * Duration.WEEK
      when 'months' then @n * Duration.AVGMONTH
      when 'years' then @n * Duration.AVGYEAR

Duration::from = Duration::after

Duration.MINUTE = 60000
Duration.HOUR = Duration.MINUTE * 60
Duration.DAY = Duration.HOUR * 24
Duration.WEEK = Duration.DAY * 7
Duration.AVGMONTH = Duration.WEEK * 4.3452380952381
Duration.AVGYEAR = Duration.DAY * 365
Duration.transformDateBy = (date, n, units)->
  [year, month, day] = [date.getFullYear(), date.getMonth(), date.getDate()]
  switch units
    when 'minutes' then new Date(date.getTime() + (n * Duration.MINUTE))
    when 'hours' then new Date(date.getTime() + (n * Duration.HOUR))
    when 'days' then new Date(year, month, (day + n))
    when 'weeks' then new Date(year, month, (day + (n * 7)))
    when 'months'
      month = month + n
      lastDayOfMonth = new Date(year, month + 1, 0).getDate()
      new Date(year, month, Math.min(day, lastDayOfMonth))
    when 'years' then new Date(year + n, month, day)

Number::minutes  = ()-> new Duration(Number(@), 'minutes')
Number::hours    = ()-> new Duration(Number(@), 'hours')
Number::days     = ()-> new Duration(Number(@), 'days')
Number::weeks    = ()-> new Duration(Number(@), 'weeks')
Number::months   = ()-> new Duration(Number(@), 'months')
Number::years    = ()-> new Duration(Number(@), 'years')
Number::minutes  = Number::minutes
Number::hours    = Number::hours
Number::day      = Number::days
Number::week     = Number::weeks
Number::month    = Number::months
Number::year     = Number::years

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
houston-core-0.8.0.pre app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.7.0 app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.7.0.beta4 app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.7.0.beta3 app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.7.0.beta2 app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.7.0.beta app/assets/javascripts/houston/core/core_ext/number.coffee
houston-core-0.6.3 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.6.2 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.6.1 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.6.0 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.6 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.5 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.4 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.3 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.2 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.1 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.0 app/assets/javascripts/core/core_ext/number.coffee
houston-core-0.5.0.beta1 app/assets/javascripts/core/core_ext/number.coffee