1 // HumanizeDuration.js - http://git.io/j0HgmQ
18 year: function(c) { return "any" + ((c !== 1) ? "s" : ""); },
19 month: function(c) { return "mes" + ((c !== 1) ? "os" : ""); },
20 week: function(c) { return "setman" + ((c !== 1) ? "es" : "a"); },
21 day: function(c) { return "di" + ((c !== 1) ? "es" : "a"); },
22 hour: function(c) { return "hor" + ((c !== 1) ? "es" : "a"); },
23 minute: function(c) { return "minut" + ((c !== 1) ? "s" : ""); },
24 second: function(c) { return "segon" + ((c !== 1) ? "s" : ""); },
25 millisecond: function(c) { return "milisegon" + ((c !== 1) ? "s" : "" ); }
29 month: function(c) { return "måned" + ((c !== 1) ? "er" : ""); },
30 week: function(c) { return "uge" + ((c !== 1) ? "r" : ""); },
31 day: function(c) { return "dag" + ((c !== 1) ? "e" : ""); },
32 hour: function(c) { return "time" + ((c !== 1) ? "r" : ""); },
33 minute: function(c) { return "minut" + ((c !== 1) ? "ter" : ""); },
34 second: function(c) { return "sekund" + ((c !== 1) ? "er" : ""); },
35 millisecond: function(c) { return "millisekund" + ((c !== 1) ? "er" : ""); }
38 year: function(c) { return "jahr" + ((c !== 1) ? "e" : ""); },
39 month: function(c) { return "monat" + ((c !== 1) ? "e" : ""); },
40 week: function(c) { return "woche" + ((c !== 1) ? "n" : ""); },
41 day: function(c) { return "tag" + ((c !== 1) ? "e" : ""); },
42 hour: function(c) { return "stunde" + ((c !== 1) ? "n" : ""); },
43 minute: function(c) { return "minute" + ((c !== 1) ? "n" : ""); },
44 second: function(c) { return "sekunde" + ((c !== 1) ? "n" : ""); },
45 millisecond: function(c) { return "millisekunde" + ((c !== 1) ? "n" : ""); }
48 year: function(c) { return "year" + ((c !== 1) ? "s" : ""); },
49 month: function(c) { return "month" + ((c !== 1) ? "s" : ""); },
50 week: function(c) { return "week" + ((c !== 1) ? "s" : ""); },
51 day: function(c) { return "day" + ((c !== 1) ? "s" : ""); },
52 hour: function(c) { return "hour" + ((c !== 1) ? "s" : ""); },
53 minute: function(c) { return "minute" + ((c !== 1) ? "s" : ""); },
54 second: function(c) { return "second" + ((c !== 1) ? "s" : ""); },
55 millisecond: function(c) { return "millisecond" + ((c !== 1) ? "s" : ""); }
59 month: function(c) { return (c === 1) ? "maand" : "maanden"; },
60 week: function(c) { return (c === 1) ? "week" : "weken"; },
61 day: function(c) { return (c === 1) ? "dag" : "dagen"; },
63 minute: function(c) { return (c === 1) ? "minuut" : "minuten"; },
64 second: function(c) { return (c === 1) ? "seconde" : "seconden"; },
65 millisecond: function(c) { return (c === 1) ? "milliseconde" : "milliseconden"; }
68 year: function(c) { return "año" + ((c !== 1) ? "s" : ""); },
69 month: function(c) { return "mes" + ((c !== 1) ? "es" : ""); },
70 week: function(c) { return "semana" + ((c !== 1) ? "s" : ""); },
71 day: function(c) { return "día" + ((c !== 1) ? "s" : ""); },
72 hour: function(c) { return "hora" + ((c !== 1) ? "s" : ""); },
73 minute: function(c) { return "minuto" + ((c !== 1) ? "s" : ""); },
74 second: function(c) { return "segundo" + ((c !== 1) ? "s" : ""); },
75 millisecond: function(c) { return "milisegundo" + ((c !== 1) ? "s" : "" ); }
78 year: function(c) { return "an" + ((c !== 1) ? "s" : ""); },
80 week: function(c) { return "semaine" + ((c !== 1) ? "s" : ""); },
81 day: function(c) { return "jour" + ((c !== 1) ? "s" : ""); },
82 hour: function(c) { return "heure" + ((c !== 1) ? "s" : ""); },
83 minute: function(c) { return "minute" + ((c !== 1) ? "s" : ""); },
84 second: function(c) { return "seconde" + ((c !== 1) ? "s" : ""); },
85 millisecond: function(c) { return "milliseconde" + ((c !== 1) ? "s" : ""); }
95 millisecond: "ezredmásodperc"
119 month: function(c) { return "måned" + ((c !== 1) ? "er" : ""); },
120 week: function(c) { return "uke" + ((c !== 1) ? "r" : ""); },
121 day: function(c) { return "dag" + ((c !== 1) ? "er" : ""); },
122 hour: function(c) { return "time" + ((c !== 1) ? "r" : ""); },
123 minute: function(c) { return "minutt" + ((c !== 1) ? "er" : ""); },
124 second: function(c) { return "sekund" + ((c !== 1) ? "er" : ""); },
125 millisecond: function(c) { return "millisekund" + ((c !== 1) ? "er" : ""); }
128 year: function(c) { return ["rok", "roku", "lata", "lat"][getPolishForm(c)]; },
129 month: function(c) { return ["miesiąc", "miesiąca", "miesiące", "miesięcy"][getPolishForm(c)]; },
130 week: function(c) { return ["tydzień", "tygodnia", "tygodnie", "tygodni"][getPolishForm(c)]; },
131 day: function(c) { return ["dzień", "dnia", "dni", "dni"][getPolishForm(c)]; },
132 hour: function(c) { return ["godzina", "godziny", "godziny", "godzin"][getPolishForm(c)]; },
133 minute: function(c) { return ["minuta", "minuty", "minuty", "minut"][getPolishForm(c)]; },
134 second: function(c) { return ["sekunda", "sekundy", "sekundy", "sekund"][getPolishForm(c)]; },
135 millisecond: function(c) { return ["milisekunda", "milisekundy", "milisekundy", "milisekund"][getPolishForm(c)]; }
138 year: function(c) { return "ano" + ((c !== 1) ? "s" : ""); },
139 month: function(c) { return (c !== 1) ? "meses" : "mês"; },
140 week: function(c) { return "semana" + ((c !== 1) ? "s" : ""); },
141 day: function(c) { return "dia" + ((c !== 1) ? "s" : ""); },
142 hour: function(c) { return "hora" + ((c !== 1) ? "s" : ""); },
143 minute: function(c) { return "minuto" + ((c !== 1) ? "s" : ""); },
144 second: function(c) { return "segundo" + ((c !== 1) ? "s" : ""); },
145 millisecond: function(c) { return "milissegundo" + ((c !== 1) ? "s" : ""); }
148 year: function(c) { return ["лет", "год", "года"][getRussianForm(c)]; },
149 month: function(c) { return ["месяцев", "месяц", "месяца"][getRussianForm(c)]; },
150 week: function(c) { return ["недель", "неделя", "недели"][getRussianForm(c)]; },
151 day: function(c) { return ["дней", "день", "дня"][getRussianForm(c)]; },
152 hour: function(c) { return ["часов", "час", "часа"][getRussianForm(c)]; },
153 minute: function(c) { return ["минут", "минута", "минуты"][getRussianForm(c)]; },
154 second: function(c) { return ["секунд", "секунда", "секунды"][getRussianForm(c)]; },
155 millisecond: function(c) { return ["миллисекунд", "миллисекунда", "миллисекунды"][getRussianForm(c)]; }
159 month: function(c) { return "månad" + ((c !== 1) ? "er" : ""); },
160 week: function(c) { return "veck" + ((c !== 1) ? "or" : "a"); },
161 day: function(c) { return "dag" + ((c !== 1) ? "ar" : ""); },
162 hour: function(c) { return "timm" + ((c !== 1) ? "ar" : "e"); },
163 minute: function(c) { return "minut" + ((c !== 1) ? "er" : ""); },
164 second: function(c) { return "sekund" + ((c !== 1) ? "er" : ""); },
165 millisecond: function(c) { return "millisekund" + ((c !== 1) ? "er" : ""); }
175 millisecond: "milisaniye"
199 // You can create a humanizer, which returns a function with defaults
201 function humanizer(passedOptions) {
203 var result = function humanizer(ms, humanizerOptions) {
204 var options = extend({}, result, humanizerOptions || {});
205 return doHumanization(ms, options);
208 return extend(result, {
212 units: ["year", "month", "week", "day", "hour", "minute", "second"],
220 // The main function is just a wrapper around a default humanizer.
221 var defaultHumanizer = humanizer({});
222 function humanizeDuration() {
223 return defaultHumanizer.apply(defaultHumanizer, arguments);
226 // doHumanization does the bulk of the work.
227 function doHumanization(ms, options) {
229 // Make sure we have a positive number.
230 // Has the nice sideffect of turning Number objects into primitives.
237 var dictionary = options.languages[options.language] || languages[options.language];
239 throw new Error("No language " + dictionary + ".");
244 // Start at the top and keep removing units, bit by bit.
245 var unitName, unitMS, unitCount, mightBeHalfUnit;
246 for (var i = 0, len = options.units.length; i < len; i ++) {
248 unitName = options.units[i];
249 if (unitName[unitName.length - 1] === "s") { // strip plurals
250 unitName = unitName.substring(0, unitName.length - 1);
252 unitMS = UNITS[unitName];
254 // If it's a half-unit interval, we're done.
255 if (result.length === 0 && options.halfUnit) {
256 mightBeHalfUnit = (ms / unitMS) * 2;
257 if (mightBeHalfUnit === Math.floor(mightBeHalfUnit)) {
258 return render(mightBeHalfUnit / 2, unitName, dictionary, options.spacer);
262 // What's the number of full units we can fit?
263 if ((i + 1) === len) {
264 unitCount = ms / unitMS;
266 unitCount = Math.round(unitCount);
269 unitCount = Math.floor(ms / unitMS);
274 result.push(render(unitCount, unitName, dictionary, options.spacer));
277 // Remove what we just figured out.
278 ms -= unitCount * unitMS;
282 return result.join(options.delimiter);
286 function render(count, type, dictionary, spacer) {
287 var dictionaryValue = dictionary[type];
289 if (typeof dictionaryValue === "function") {
290 word = dictionaryValue(count);
292 word = dictionaryValue;
294 return count + spacer + word;
297 function extend(destination) {
299 for (var i = 1; i < arguments.length; i ++) {
300 source = arguments[i];
301 for (var prop in source) {
302 destination[prop] = source[prop];
308 // Internal helper function for Polish language.
309 function getPolishForm(c) {
312 } else if (Math.floor(c) !== c) {
314 } else if (2 <= c % 10 && c % 10 <= 4 && !(10 < c % 100 && c % 100 < 20)) {
321 // Internal helper function for Russian language.
322 function getRussianForm(c) {
323 if (Math.floor(c) !== c) {
325 } else if (c === 0 || (c >= 5 && c <= 20) || (c % 10 >= 5 && c % 10 <= 9) || (c % 10 === 0)) {
327 } else if (c === 1 || c % 10 === 1) {
336 humanizeDuration.humanizer = humanizer;
337 if (typeof define === "function" && define.amd) {
339 return humanizeDuration;
341 } else if (typeof module !== "undefined" && module.exports) {
342 module.exports = humanizeDuration;
344 this.humanizeDuration = humanizeDuration;