// adapted from https://unpkg.com/timeago.js@4.0.0-beta.1/lib/index.js /** * Created by hustcc on 18/5/20. * Contract: i@hust.cc */ var IndexMapEn = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'] var SEC_ARRAY = [60, 60, 24, 7, 365 / 7 / 12, 12] /** * Created by hustcc on 18/5/20. * Contract: i@hust.cc */ function en (number, index) { if (index === 0) { return ['just now', 'right now'] } var unit = IndexMapEn[Math.floor(index / 2)] if (number > 1) { unit += 's' } return [number + ' ' + unit + ' ago', 'in ' + number + ' ' + unit] } /** * Created by hustcc on 18/5/20. * Contract: i@hust.cc */ /** * format the diff second to *** time ago, with setting locale * @param diff * @param locale * @param defaultLocale * @returns {string | void | *} */ function formatDiff (diff) { // if locale is not exist, use defaultLocale. // if defaultLocale is not exist, use build-in `en`. // be sure of no error when locale is not exist. var i = 0 var agoin = diff < 0 ? 1 : 0 // timein or timeago var totalSec = diff = Math.abs(diff) for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) { diff /= SEC_ARRAY[i] } diff = Math.floor(diff) i *= 2 if (diff > (i === 0 ? 9 : 1)) i += 1 return en(diff, i, totalSec)[agoin].replace('%s', diff) } /** * calculate the diff second between date to be formatted an now date. * @param date * @param nowDate * @returns {number} */ function diffSec (date, now) { return (now - date) / 1000 } /** * Created by hustcc on 18/5/20. * Contract: i@hust.cc */ export function format (date, now) { return formatDiff(diffSec(date, now)) }