Advertisement
Guest User

Untitled

a guest
May 5th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1. /**
  2. * // USAGE
  3. * var humanizer = new HumanizeDuration();
  4. *
  5. * humanizer.humanize(10080, 'minutes' ); // Returns: '1 week'
  6. * humanizer.humanize(21344, 'minutes' ); // Returns: '2 weeks, 19 hours, 44 minutes'
  7. * humanizer.humanize(2101080000, 'milliseconds'); // Returns: '3 weeks, 3 days, 7 hours, 38 minutes'
  8. * humanizer.humanize(59, 'days' ); // Returns: '8 weeks, 3 days'
  9. * humanizer.humanize(211777, 'seconds' ); // Returns: '2 days, 10 hours, 49 minutes, 37 seconds'
  10. * humanizer.humanize(10080, 'hours' ); // Returns: '60 weeks'
  11. *
  12. * humanizer.humanize(10080, 'minutes', '-week'); // Returns: ''
  13. * humanizer.humanize(10080, 'minutes', '-week +day +millisecond'); // Returns: '0 days, 0 milliseconds'
  14. * humanizer.humanize(211777, 'seconds', '-hour +week'); // Returns: '0 week, 2 days, 49 minutes, 37 seconds'
  15. *
  16. */
  17.  
  18. 'use strict';
  19.  
  20. var MILLISECOND = 'millisecond';
  21. var MILLISECONDS = 'milliseconds';
  22. var SECOND = 'second';
  23. var SECONDS = 'seconds';
  24. var MINUTE = 'minute';
  25. var MINUTES = 'minutes';
  26. var HOUR = 'hour';
  27. var HOURS = 'hours';
  28. var DAY = 'day';
  29. var DAYS = 'days';
  30. var WEEK = 'week';
  31. var WEEKS = 'weeks';
  32.  
  33. var _ = require('lodash');
  34. var moment = require('moment');
  35.  
  36. var getValue = function(duration, unit){
  37. switch(unit){
  38. case 'w':
  39. case 'week':
  40. case 'weeks':
  41. return Math.floor(duration.as(unit));
  42.  
  43. case 'd':
  44. case 'day':
  45. case 'days':
  46. return Math.floor(duration.as(unit) % 7);
  47.  
  48. default:
  49. return duration.get(unit);
  50. }
  51. };
  52.  
  53. var shouldInclude = function(duration, fields, unit){
  54. var value = getValue(duration, unit);
  55. return _.includes(fields, '+' + unit) || (!_.includes(fields, '-' + unit) && value !== 0);
  56. };
  57.  
  58. var valueString = function(duration, labels, unit){
  59. var value = getValue(duration, unit);
  60. return value + ' ' + labels[value === 1 ? 'single' : 'plural'][unit];
  61. };
  62.  
  63. function HumanizeDuration(labels){
  64.  
  65. this.labels = _.merge({
  66. single: {
  67. millisecond : MILLISECOND,
  68. second : SECOND,
  69. minute : MINUTE,
  70. hour : HOUR,
  71. day : DAY,
  72. week : WEEK
  73. },
  74.  
  75. plural: {
  76. millisecond : MILLISECONDS,
  77. second : SECONDS,
  78. minute : MINUTES,
  79. hour : HOURS,
  80. day : DAYS,
  81. week : WEEKS
  82. }
  83. }, labels);
  84.  
  85. }
  86.  
  87. HumanizeDuration.prototype.humanize = function(value, unit, fields){
  88.  
  89. fields = _.isEmpty(fields) ? [] : (_.isArray(fields) ? fields : fields.split(' '));
  90.  
  91. var duration = moment.duration(value, unit);
  92.  
  93. var strings = [];
  94.  
  95. if (shouldInclude(duration, fields, 'week' )){ strings.push(valueString(duration, this.labels, 'week' )); }
  96. if (shouldInclude(duration, fields, 'day' )){ strings.push(valueString(duration, this.labels, 'day' )); }
  97. if (shouldInclude(duration, fields, 'hour' )){ strings.push(valueString(duration, this.labels, 'hour' )); }
  98. if (shouldInclude(duration, fields, 'minute' )){ strings.push(valueString(duration, this.labels, 'minute' )); }
  99. if (shouldInclude(duration, fields, 'second' )){ strings.push(valueString(duration, this.labels, 'second' )); }
  100. if (shouldInclude(duration, fields, 'millisecond')){ strings.push(valueString(duration, this.labels, 'millisecond')); }
  101.  
  102. return strings.join(', ');
  103.  
  104. };
  105.  
  106. module.exports = HumanizeDuration;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement