| 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;
 
 
  |