| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | var pad = require('../number/pad');var lpad = require('../string/lpad');var i18n = require('./i18n_');var dayOfTheYear = require('./dayOfTheYear');var timezoneOffset = require('./timezoneOffset');var timezoneAbbr = require('./timezoneAbbr');var weekOfTheYear = require('./weekOfTheYear');    var _combinations = {        'D': '%m/%d/%y',        'F': '%Y-%m-%d',        'r': '%I:%M:%S %p',        'R': '%H:%M',        'T': '%H:%M:%S',        'x': 'locale',        'X': 'locale',        'c': 'locale'    };    /**     * format date based on strftime format     */    function strftime(date, format, localeData){        localeData = localeData  || i18n;        var reToken = /%([a-z%])/gi;        function makeIterator(fn) {            return function(match, token){                return fn(date, token, localeData);            };        }        return format            .replace(reToken, makeIterator(expandCombinations))            .replace(reToken, makeIterator(convertToken));    }    function expandCombinations(date, token, l10n){        if (token in _combinations) {            var expanded = _combinations[token];            return expanded === 'locale'? l10n[token] : expanded;        } else {            return '%'+ token;        }    }    function convertToken(date, token, l10n){        switch (token){            case 'a':                return l10n.days_abbr[date.getDay()];            case 'A':                return l10n.days[date.getDay()];            case 'h':            case 'b':                return l10n.months_abbr[date.getMonth()];            case 'B':                return l10n.months[date.getMonth()];            case 'C':                return pad(Math.floor(date.getFullYear() / 100), 2);            case 'd':                return pad(date.getDate(), 2);            case 'e':                return pad(date.getDate(), 2, ' ');            case 'H':                return pad(date.getHours(), 2);            case 'I':                return pad(date.getHours() % 12, 2);            case 'j':                return pad(dayOfTheYear(date), 3);            case 'l':                return lpad(date.getHours() % 12, 2);            case 'L':                return pad(date.getMilliseconds(), 3);            case 'm':                return pad(date.getMonth() + 1, 2);            case 'M':                return pad(date.getMinutes(), 2);            case 'n':                return '\n';            case 'p':                return date.getHours() >= 12? l10n.pm : l10n.am;            case 'P':                return convertToken(date, 'p', l10n).toLowerCase();            case 's':                return date.getTime() / 1000;            case 'S':                return pad(date.getSeconds(), 2);            case 't':                return '\t';            case 'u':                var day = date.getDay();                return day === 0? 7 : day;            case 'U':                return pad(weekOfTheYear(date), 2);            case 'w':                return date.getDay();            case 'W':                return pad(weekOfTheYear(date, 1), 2);            case 'y':                return pad(date.getFullYear() % 100, 2);            case 'Y':                return pad(date.getFullYear(), 4);            case 'z':                return timezoneOffset(date);            case 'Z':                return timezoneAbbr(date);            case '%':                return '%';            default:                // keep unrecognized tokens                return '%'+ token;        }    }    module.exports = strftime;
 |