Edate.js
Everyone who workerd with Ruby and ActiveSupport will agree that usability of JavaScript’s Date not far from old good C.
This weekend I decided to play with Object.defineProperty(), from ECMAScript 5 specification and add extend JS with some useful stuff from ActiveSupport:
(1).day.ago
(2).weeks.fromNow
(3).hours.since(Date.yesterday())
(4).minutes.after(Date.now() + (1).day)
(5).weeks.fromNow.atTheEndOfDay
(7).weeks.ago.atTheBeginningOfYear
Number extended with following getters: minute, hour, day, week with plural forms.
This getters return period of time in milliseconds:
(1).minute // => 1000 * 60
Beside ‘converting’ getters Number was extended by ‘calculating’ getters: ago, fromNow, since, after.
This group of getters always return Date object.
(1).week.fromNow // => Tue May 17 2011 00:40:14 GMT+0300 (EEST)
Number.prototype.toDate() just converts Number to Date.
(1).week.toDate() // => the end of first week since Unix epoch
Prototypes of Date and Nubmer was extended also with following ‘calculating’ getters:
atTheBeginningOf[SOMETHING] and atTheEndOf[SOMETHING].
Where [SOMETHING] is Minute, Hour, Day, Week, Month or Year.
Date.now().atTheBeginningOfYear // => Sat Jan 01 2011 00:00:00 GMT+0200 (EET)
(new Date()).atTheBeginningOfDay // => Tue May 10 2011 00:00:00 GMT+0300 (EEST)
And some functions for lazy:
Date.today() // => Date
Date.yesterday() // => Date
Date.tomorrow() // => Date
All this stuff was made for fun with ECMAScript 5, but ofcourse You can use it in real projects :)
It will not work in ancient browsers like IE <= 9. For Opera i made small hack —–
Object.prototype.__defineGetter__ instead Object.defineProperty().
Code at GitHub.