1 define(['../number/pad', '../string/lpad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, lpad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) {
16 * format date based on strftime format
18 function strftime(date, format, localeData){
19 localeData = localeData || i18n;
20 var reToken = /%([a-z%])/gi;
22 function makeIterator(fn) {
23 return function(match, token){
24 return fn(date, token, localeData);
29 .replace(reToken, makeIterator(expandCombinations))
30 .replace(reToken, makeIterator(convertToken));
34 function expandCombinations(date, token, l10n){
35 if (token in _combinations) {
36 var expanded = _combinations[token];
37 return expanded === 'locale'? l10n[token] : expanded;
44 function convertToken(date, token, l10n){
47 return l10n.days_abbr[date.getDay()];
49 return l10n.days[date.getDay()];
52 return l10n.months_abbr[date.getMonth()];
54 return l10n.months[date.getMonth()];
56 return pad(Math.floor(date.getFullYear() / 100), 2);
58 return pad(date.getDate(), 2);
60 return pad(date.getDate(), 2, ' ');
62 return pad(date.getHours(), 2);
64 return pad(date.getHours() % 12, 2);
66 return pad(dayOfTheYear(date), 3);
68 return lpad(date.getHours() % 12, 2);
70 return pad(date.getMilliseconds(), 3);
72 return pad(date.getMonth() + 1, 2);
74 return pad(date.getMinutes(), 2);
78 return date.getHours() >= 12? l10n.pm : l10n.am;
80 return convertToken(date, 'p', l10n).toLowerCase();
82 return date.getTime() / 1000;
84 return pad(date.getSeconds(), 2);
88 var day = date.getDay();
89 return day === 0? 7 : day;
91 return pad(weekOfTheYear(date), 2);
95 return pad(weekOfTheYear(date, 1), 2);
97 return pad(date.getFullYear() % 100, 2);
99 return pad(date.getFullYear(), 4);
101 return timezoneOffset(date);
103 return timezoneAbbr(date);
107 // keep unrecognized tokens