Skip to content

Instantly share code, notes, and snippets.

@gf3
Created Jun 2, 2011
Embed
What would you like to do?
Super small relative dates
module.exports = (function(){
const MS =
{ seconds: 1000
, minutes: 60 * 1000
, hours: 60 * 60 * 1000
, days: 24 * 60 * 60 * 1000
, weeks: 7 * 24 * 60 * 60 * 1000
, months: 30 * 7 * 24 * 60 * 60 * 1000
, years: 365 * 24 * 60 * 60 * 1000 }
return ago
function ago ( origin ) {
var delta = Date.now() - origin.getTime()
, ago
if ( ago = doDelta( 'years') )
return ~~ago + 'y'
else if ( ago = doDelta( 'months') )
return ~~ago + 'm'
else if ( ago = doDelta( 'weeks') )
return ~~ago + 'w'
else if ( ago = doDelta( 'days') )
return ~~ago + 'd'
else if ( ago = doDelta( 'hours') )
return ~~ago + 'h'
else if ( ago = doDelta( 'minutes') )
return ~~ago + 'm'
else if ( ago = doDelta( 'seconds') )
return ~~ago + 's'
return 'now'
function doDelta ( type ) {
var result = delta / MS[type]
return result >= 1 && result
}
}
})()
var ago = require( './ago' )
, now = new Date
console.log( ago( new Date( 2011, now.getMonth(), now.getDate(), now.getHours() - 5 ) ) ) // 5h
console.log( ago( new Date( 2011, now.getMonth(), now.getDate() - 15 ) ) ) // 2w
console.log( ago( new Date( 2006, now.getMonth(), now.getDate() ) ) ) // 5y
@mathiasbynens

This comment has been minimized.

Copy link

@mathiasbynens mathiasbynens commented Jun 3, 2011

Nice!

Instead of new Date().getTime() (line 14), you could use Date.now().

@gf3

This comment has been minimized.

Copy link
Owner Author

@gf3 gf3 commented Jun 3, 2011

So I can, thanks Mathias!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment