UNPKG

moment-relative-range

Version:

Calculate a date range in the past from a certain moment

180 lines (144 loc) 6.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatRelative = exports.formatStatic = exports.DEFAULT_RELATIVE_RANGE_LOCALE = exports.DEFAULT_STATIC_RANGE_LOCALE = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var REMOVE_DAY_REGEX = /([^MY]*)D([^MY,]*)/; var REMOVE_MONTH_REGEX = /([^D.]*)(M+)([^D.]*)/; var REMOVE_YEAR_REGEX = /([^MD.]*)YYYY([^MD.]*)/; var DEFAULT_STATIC_RANGE_LOCALE = exports.DEFAULT_STATIC_RANGE_LOCALE = { separator: '-', otherYear: '%s YYYY' }; var DEFAULT_RELATIVE_RANGE_LOCALE = exports.DEFAULT_RELATIVE_RANGE_LOCALE = { past: 'previous %d', future: 'next %d', current: 'this %d', day: 'day', day_plural: '%s days', week: 'week', week_plural: '%s weeks', month: 'month', month_plural: '%s months', quarter: 'quarter', quarter_plural: '%s quarters', year: 'year', year_plural: '%s years', r: { past: 'last %d', future: 'coming %d', current: '%d to date', day_0: 'today', day_1: 'tomorrow', 'day_-1': 'yesterday' } }; _moment2.default.updateLocale('en', { staticRange: _extends({}, DEFAULT_STATIC_RANGE_LOCALE, { otherYear: '%s, YYYY' }), relativeRange: DEFAULT_RELATIVE_RANGE_LOCALE }); var cleanFormat = function cleanFormat(format, regex) { var bool = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; return bool ? format.replace(regex, '') : format; }; var formatStatic = function formatStatic(range) { var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'll'; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var date = range.date, start = range.start, end = range.end, _range$locale = range.locale, locale = _range$locale === undefined ? _moment2.default.locale() : _range$locale; var localMoment = (0, _moment2.default)().locale(locale); var _ref = localMoment.localeData()._config.staticRange || DEFAULT_STATIC_RANGE_LOCALE, _ref$separator = _ref.separator, separator = _ref$separator === undefined ? '-' : _ref$separator, _ref$otherYear = _ref.otherYear, otherYearConfig = _ref$otherYear === undefined ? '%s YYYY' : _ref$otherYear; var _options$attemptYearH = options.attemptYearHiding, attemptYearHiding = _options$attemptYearH === undefined ? false : _options$attemptYearH, _options$attemptDayHi = options.attemptDayHiding, attemptDayHiding = _options$attemptDayHi === undefined ? false : _options$attemptDayHi; var result = []; var sameYear = start.year() === end.year(); var sameMonth = sameYear && start.month() === end.month(); var sameDay = sameMonth && start.date() === end.date(); var isReadable = format.toLowerCase() === 'll'; var monthsMergable = sameMonth && !sameDay && isReadable; var year = date ? (0, _moment2.default)(date).year() : (0, _moment2.default)().year(); var startThisYear = start.year() === year; var endThisYear = end.year() === year; var hideDay = attemptDayHiding && isReadable && start.date() === 1 && end.date() === end.daysInMonth(); var longDateFormat = isReadable ? cleanFormat(localMoment.localeData().longDateFormat(format), REMOVE_DAY_REGEX, hideDay) : format; var longMonthFormat = cleanFormat(longDateFormat, REMOVE_YEAR_REGEX, isReadable); start.locale(locale); end.locale(locale); var startFormat = void 0; var endFormat = void 0; if (monthsMergable && !sameDay) { var dayFirst = longDateFormat.indexOf('D') < longDateFormat.indexOf('M'); if (dayFirst) { startFormat = cleanFormat(longMonthFormat, REMOVE_MONTH_REGEX); endFormat = longMonthFormat; } else { startFormat = longMonthFormat; endFormat = cleanFormat(longMonthFormat, REMOVE_MONTH_REGEX); } } else { startFormat = startThisYear && sameYear && attemptYearHiding ? longMonthFormat : longDateFormat; endFormat = endThisYear && sameYear && attemptYearHiding ? longMonthFormat : longDateFormat; } if (startFormat.length) { result.push(start.format(startFormat)); } if (!sameDay) { if (result.length) { result.push(separator); } if (monthsMergable && (!endThisYear || !attemptYearHiding) && endFormat !== longDateFormat) { endFormat = otherYearConfig.replace('%s', endFormat); } result.push(end.format(endFormat)); } return result.join(' '); }; var relativeTypeByCount = function relativeTypeByCount(count) { switch (count) { case 0: return 'current'; default: return count > 0 ? 'future' : 'past'; } }; var formatRelative = function formatRelative(range) { var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'RR'; var count = range.count, measure = range.measure, _range$locale2 = range.locale, locale = _range$locale2 === undefined ? _moment2.default.locale() : _range$locale2; var localMoment = (0, _moment2.default)().locale(locale); // eslint-disable-next-line no-underscore-dangle var localeData = localMoment.localeData()._config.relativeRange || DEFAULT_RELATIVE_RANGE_LOCALE; localeData = _extends({}, localeData, localeData[format]); var type = relativeTypeByCount(count); var countKey = [measure, count].join('_'); var countTranslation = localeData[countKey]; if (countTranslation) { return countTranslation.replace('%s', Math.abs(count)); } var absCount = Math.abs(count); var plural = absCount > 1; var pluralKey = plural ? measure + '_plural' : measure; var translation = localeData[pluralKey] || localeData[measure] || ''; var typePluralKey = plural ? type + '_plural' : type; var typeTranslation = localeData[type + '_' + measure] || localeData[type + '_' + absCount] || localeData[typePluralKey] || localeData[type] || ''; return typeTranslation.replace('%d', translation.replace('%s', '' + absCount)); }; exports.formatStatic = formatStatic; exports.formatRelative = formatRelative;