You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					97 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					97 lines
				
				2.8 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = formatDuration; | ||
|  | 
 | ||
|  | var _index = _interopRequireDefault(require("../locale/en-US/index.js")); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | var defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']; | ||
|  | /** | ||
|  |  * @name formatDuration | ||
|  |  * @category Common Helpers | ||
|  |  * @summary Formats a duration in human-readable format | ||
|  |  * | ||
|  |  * @description | ||
|  |  * Return human-readable duration string i.e. "9 months 2 days" | ||
|  |  * | ||
|  |  * @param {Duration} duration - the duration to format | ||
|  |  * @param {Object} [options] - an object with options. | ||
|  | 
 | ||
|  |  * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format | ||
|  |  * @param {boolean} [options.zero=false] - should be zeros be included in the output? | ||
|  |  * @param {string} [options.delimiter=' '] - delimiter string | ||
|  |  * @returns {string} the formatted date string | ||
|  |  * @throws {TypeError} 1 argument required | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // Format full duration
 | ||
|  |  * formatDuration({ | ||
|  |  *   years: 2, | ||
|  |  *   months: 9, | ||
|  |  *   weeks: 1, | ||
|  |  *   days: 7, | ||
|  |  *   hours: 5, | ||
|  |  *   minutes: 9, | ||
|  |  *   seconds: 30 | ||
|  |  * }) | ||
|  |  * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds
 | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // Format partial duration
 | ||
|  |  * formatDuration({ months: 9, days: 2 }) | ||
|  |  * //=> '9 months 2 days'
 | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // Customize the format
 | ||
|  |  * formatDuration( | ||
|  |  *   { | ||
|  |  *     years: 2, | ||
|  |  *     months: 9, | ||
|  |  *     weeks: 1, | ||
|  |  *     days: 7, | ||
|  |  *     hours: 5, | ||
|  |  *     minutes: 9, | ||
|  |  *     seconds: 30 | ||
|  |  *   }, | ||
|  |  *   { format: ['months', 'weeks'] } | ||
|  |  * ) === '9 months 1 week' | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // Customize the zeros presence
 | ||
|  |  * formatDuration({ years: 0, months: 9 }) | ||
|  |  * //=> '9 months'
 | ||
|  |  * formatDuration({ years: 0, months: 9 }, null, { zero: true }) | ||
|  |  * //=> '0 years 9 months'
 | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // Customize the delimiter
 | ||
|  |  * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' }) | ||
|  |  * //=> '2 years, 9 months, 3 weeks'
 | ||
|  |  */ | ||
|  | 
 | ||
|  | function formatDuration(duration) { | ||
|  |   var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
|  | 
 | ||
|  |   if (arguments.length < 1) { | ||
|  |     throw new TypeError("1 argument required, but only ".concat(arguments.length, " present")); | ||
|  |   } | ||
|  | 
 | ||
|  |   var format = options.format || defaultFormat; | ||
|  |   var locale = options.locale || _index.default; | ||
|  |   var zero = options.zero || false; | ||
|  |   var delimiter = options.delimiter || ' '; | ||
|  |   var result = format.reduce(function (acc, unit) { | ||
|  |     var token = "x".concat(unit.replace(/(^.)/, function (m) { | ||
|  |       return m.toUpperCase(); | ||
|  |     })); | ||
|  |     var addChunk = typeof duration[unit] === 'number' && (zero || duration[unit]); | ||
|  |     return addChunk ? acc.concat(locale.formatDistance(token, duration[unit])) : acc; | ||
|  |   }, []).join(delimiter); | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = exports.default; |