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.