Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.date.php"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.date.php"] = true;
dojo.provide("dojox.date.php");
dojo.require("dojo.date");

dojox.date.php.format = function(/*Date*/ date, /*String*/ format, /*Object?*/ overrides){
        // summary: Get a formatted string for a given date object
        var df = new dojox.date.php.DateFormat(date);
        return df.format(format, overrides);    
}

dojox.date.php.DateFormat = function(/*Date*/ date){
        this.date = date;
}
dojo.extend(dojox.date.php.DateFormat, {
        weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        monthdays: [31,28,31,30,31,30,31,31,30,31,30,31],

        format: function(/*String*/ format, /*Object?*/ overrides){
                // summary: Format the internal date object
                var parts = [];
                for(var i = 0; i < format.length; i++){
                        var chr = format.charAt(i);
                        if(overrides && typeof overrides[chr] == "function"){
                                parts.push(overrides[chr].call(this));
                        }else if(typeof this[chr] == "function"){
                                parts.push(this[chr]());
                        }else{
                                parts.push(chr);
                        }
                }
                return parts.join("");
        },

        // Day

        d: function(){
                // summary: Day of the month, 2 digits with leading zeros
                var j = this.j();
                return (j.length == 1) ? "0" + j : j;
        },

        D: function(){
                // summary: A textual representation of a day, three letters
                return this.weekdays_3[this.date.getDay()];
        },

        j: function(){
                // summary: Day of the month without leading zeros
                return this.date.getDate() + "";
        },

        l: function(){
                // summary: A full textual representation of the day of the week
                return this.weekdays[this.date.getDay()];
        },
        
        N: function(){
                // summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
                var w = this.w();
                return (!w) ? 7 : w;
        },

        S: function(){
                // summary: English ordinal suffix for the day of the month, 2 characters
                switch(this.date.getDate()){
                        case 11: case 12: case 13: return "th";
                        case 1: case 21: case 31: return "st";
                        case 2: case 22: return "nd";
                        case 3: case 23: return "rd";
                        default: return "th";
                }
        },

        w: function(){
                // summary: Numeric representation of the day of the week
                return this.date.getDay() + "";
        },

        z: function(){
                // summary: The day of the year (starting from 0)
                var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime();
                return Math.floor(millis/86400000) + "";
        },

        // Week

        W: function(){
                // summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)
                var week;
                var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1;
                var w = this.date.getDay() + 1;
                var z = parseInt(this.z());

                if(z <= (8 - jan1_w) && jan1_w > 4){
                        var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate());
                        if(jan1_w == 5 || (jan1_w == 6 && dojo.date.isLeapYear(last_year))){
                                week = 53;
                        }else{
                                week = 52;
                        }
                }else{
                        var i;
                        if(Boolean(this.L())){
                                i = 366;
                        }else{
                                i = 365;
                        }
                        if((i - z) < (4 - w)){
                                week = 1;
                        }else{
                                var j = z + (7 - w) + (jan1_w - 1);
                                week = Math.ceil(j / 7);
                                if(jan1_w > 4){
                                        --week;
                                }
                        }
                }
                
                return week;
        },

        // Month

        F: function(){
                // summary: A full textual representation of a month, such as January or March
                return this.months[this.date.getMonth()];
        },

        m: function(){
                // summary: Numeric representation of a month, with leading zeros
                var n = this.n();
                return (n.length == 1) ? "0" + n : n;
        },

        M: function(){
                // summary: A short textual representation of a month, three letters
                return months_3[this.date.getMonth()];
        },

        n: function(){
                // summary: Numeric representation of a month, without leading zeros
                return this.date.getMonth() + 1 + "";
        },

        t: function(){
                // summary: Number of days in the given month
                return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()];
        },

        // Year

        L: function(){
                // summary: Whether it's a leap year
                return (dojo.date.isLeapYear(this.date)) ? "1" : "0";
        },

        o: function(){
                // summary:
                //              ISO-8601 year number. This has the same value as Y, except that if
                //              the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)
                // TODO: Figure out what this means
        },

        Y: function(){
                // summary: A full numeric representation of a year, 4 digits
                return this.date.getFullYear() + "";
        },

        y: function(){
                // summary: A two digit representation of a year
                return this.date.getFullYear.substsring(2, 4);
        },

        // Time

        a: function(){
                // summary: Lowercase Ante meridiem and Post meridiem
                return this.date.getHours() >= 12 ? "pm" : "am";
        },

        b: function(){
                // summary: Uppercase Ante meridiem and Post meridiem
                return this.a().toUpperCase();
        },

        B: function(){
                // summary:
                //      Swatch Internet time
                //      A day is 1,000 beats. All time is measured from GMT + 1
                var off = this.date.getTimezoneOffset() + 60;
                var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60);
                var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + "";
                while(beat.length <  2) beat = "0" + beat;
                return beat;
        },

        g: function(){
                // summary: 12-hour format of an hour without leading zeros
                return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + "";
        },

        G: function(){
                // summary: 24-hour format of an hour without leading zeros
                return this.date.getHours() + "";
        },

        h: function(){
                // summary: 12-hour format of an hour with leading zeros
                var g = this.g();
                return (g.length == 1) ? "0" + g : g;
        },

        H: function(){
                // summary: 24-hour format of an hour with leading zeros
                var G = this.G();
                return (G.length == 1) ? "0" + G : G;
        },

        i: function(){
                // summary: Minutes with leading zeros
                var mins = this.date.getMinutes() + "";
                return (mins.length == 1) ? "0" + mins : mins;
        },

        s: function(){
                // summary: Seconds, with leading zeros
                var secs = this.date.getSeconds() + "";
                return (secs.length == 1) ? "0" + secs : secs;
        },

        // Timezone

        e: function(){
                // summary: Timezone identifier (added in PHP 5.1.0)
                return dojo.date.getTimezoneName(this.date);
        },

        I: function(){
                // summary: Whether or not the date is in daylight saving time
                // TODO: Can dojo.date do this?
        },

        O: function(){
                // summary: Difference to Greenwich time (GMT) in hours
                var off = Math.abs(this.date.getTimezoneOffset());
                var hours = Math.floor(off / 60) + "";
                var mins = (off % 60) + "";
                if(hours.length == 1) hours = "0" + hours;
                if(mins.length == 1) hours = "0" + mins;
                return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins;
        },

        P: function(){
                // summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)
                var O = this.O();
                return O.substring(0, 2) + ":" + O.substring(2, 4);
        },

        T: function(){
                // summary: Timezone abbreviation

                // Guess...
                return this.e().substring(0, 3);
        },

        Z: function(){
                // summary:
                //              Timezone offset in seconds. The offset for timezones west of UTC is always negative,
                //              and for those east of UTC is always positive.
                return this.date.getTimezoneOffset() * -60;
        },

        // Full Date/Time

        c: function(){
                // summary: ISO 8601 date (added in PHP 5)
                return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P();
        },

        r: function(){
                // summary: RFC 2822 formatted date
                return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
        },

        U: function(){
                // summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
                return Math.floor(this.date.getTime() / 1000);
        }

});

}