• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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'];