timeAgo.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var isDate = require('./isDate');
  2. var toInt = require('./toInt');
  3. exports = function(date, now) {
  4. if (!isDate(date)) date = new Date(date);
  5. now = now || new Date();
  6. if (!isDate(now)) now = new Date(now);
  7. var diff = (now - date) / 1000;
  8. var i = 0;
  9. var ago = diff > 0;
  10. diff = Math.abs(diff);
  11. while (diff >= secArr[i] && i < secArrLen) {
  12. diff /= secArr[i];
  13. i++;
  14. }
  15. diff = toInt(diff);
  16. i *= 2;
  17. if (diff > (i === 0 ? 9 : 1)) i += 1;
  18. return format(diff, i, ago);
  19. };
  20. var secArr = [60, 60, 24, 7, 365 / 7 / 12, 12];
  21. var secArrLen = secArr.length;
  22. function format(diff, i, ago) {
  23. return exports.i18n[i][ago ? 0 : 1].replace('%s', diff);
  24. }
  25. exports.i18n = [
  26. ['just now', 'right now'],
  27. ['%s seconds ago', 'in %s seconds'],
  28. ['1 minute ago', 'in 1 minute'],
  29. ['%s minutes ago', 'in %s minutes'],
  30. ['1 hour ago', 'in 1 hour'],
  31. ['%s hours ago', 'in %s hours'],
  32. ['1 day ago', 'in 1 day'],
  33. ['%s days ago', 'in %s days'],
  34. ['1 week ago', 'in 1 week'],
  35. ['%s weeks ago', 'in %s weeks'],
  36. ['1 month ago', 'in 1 month'],
  37. ['%s months ago', 'in %s months'],
  38. ['1 year ago', 'in 1 year'],
  39. ['%s years ago', 'in %s years']
  40. ];
  41. module.exports = exports;