1'use strict'; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.default = relativeDateFactory; 7var calculateDelta = function calculateDelta(now, date) { 8 return Math.round(Math.abs(now - date) / 1000); 9}; 10 11function relativeDateFactory(translations) { 12 return function relativeDate(date) { 13 var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date(); 14 15 if (!(date instanceof Date)) { 16 date = new Date(date); 17 } 18 19 var delta = null; 20 21 var minute = 60; 22 var hour = minute * 60; 23 var day = hour * 24; 24 var week = day * 7; 25 var month = day * 30; 26 var year = day * 365; 27 28 delta = calculateDelta(now, date); 29 30 if (delta > day && delta < week) { 31 date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); 32 delta = calculateDelta(now, date); 33 } 34 35 var translate = function translate(translatePhrase, timeValue) { 36 var key = void 0; 37 38 if (translatePhrase === 'justNow') { 39 key = translatePhrase; 40 } else if (now >= date) { 41 key = translatePhrase + 'Ago'; 42 } else { 43 key = translatePhrase + 'FromNow'; 44 } 45 46 var translation = translations[key]; 47 48 if (typeof translation === 'function') { 49 return translation(timeValue); 50 } 51 52 return translation.replace('{{time}}', timeValue); 53 }; 54 55 switch (false) { 56 case !(delta < 30): 57 return translate('justNow'); 58 59 case !(delta < minute): 60 return translate('seconds', delta); 61 62 case !(delta < 2 * minute): 63 return translate('aMinute'); 64 65 case !(delta < hour): 66 return translate('minutes', Math.floor(delta / minute)); 67 68 case Math.floor(delta / hour) !== 1: 69 return translate('anHour'); 70 71 case !(delta < day): 72 return translate('hours', Math.floor(delta / hour)); 73 74 case !(delta < day * 2): 75 return translate('aDay'); 76 77 case !(delta < week): 78 return translate('days', Math.floor(delta / day)); 79 80 case Math.floor(delta / week) !== 1: 81 return translate('aWeek'); 82 83 case !(delta < month): 84 return translate('weeks', Math.floor(delta / week)); 85 86 case Math.floor(delta / month) !== 1: 87 return translate('aMonth'); 88 89 case !(delta < year): 90 return translate('months', Math.floor(delta / month)); 91 92 case Math.floor(delta / year) !== 1: 93 return translate('aYear'); 94 95 default: 96 return translate('overAYear'); 97 } 98 }; 99} 100module.exports = exports['default'];