反编译获取的一些 B 站工具方法
formatTime.js
复制
import getDayStartTime from './getDayStartTime'; import formatToDate from './formatToDate'; /** * 获取事件发生到现在的可读时间 * @param {number} time 事件发生时时间戳 * @param {{ * justNow: string; * minutesAgo: string; * hoursAgo: string; * yesterday : string; * future: string; * }} timeNames * @returns * 1 分钟以内 => 刚刚 * [1 分钟,60 分钟) => n 分钟前(例:8 分钟前) * [1 小时,24 小时) => n 小时前(例: 8 小时前) * 其他 => 年-月-日(例: 2016-08-05) */ function formatTime(time, timeNames) { var date = formatToDate(time); if (!date) return ''; if (!timeNames) timeNames = {}; var justNow = timeNames.justNow || '刚刚'; var minutesAgo = timeNames.minutesAgo || '分钟前'; var hoursAgo = timeNames.hoursAgo || '小时前'; var yesterday = timeNames.yesterday || '昨天'; var future = timeNames.future || ''; var now = Date.now(); time = date.valueOf(); if (now < time) return future; if (now - time <= 6e4) return justNow; if (now - time < 36e5) { return Math.floor((now - time) / 6e4) + minutesAgo; } if (now - time < 864e5) { return Math.floor((now - time) / 36e5) + hoursAgo; } if (getDayStartTime(new Date()) - time < 864e5) { return yesterday; } var y = date.getFullYear(); var m = "0".concat(date.getMonth() + 1).substr(-2); var d = "0".concat(date.getDate()).substr(-2); if (y === new Date().getFullYear()) { return "".concat(m, "-").concat(d); } return "".concat(y, "-").concat(m, "-").concat(d); } export default formatTime;
isUdf.js
复制
/** * 判断一个变量是否为 undefined * @param {*} value * @returns {boolean} */ function isUdf(value) { return value === undefined; } export default isUdf;
getDayStartTime.js
复制
import isUdf from './isUdf'; import formatToDate from './formatToDate'; /** * 获取一天的开始时间,00 点 00 分 00 秒时间戳 * @param {Date|number|string} time * @returns {number} * * getDayStartTime('2021-10-01'); // => 1633017600000 */ function getDayStartTime(time) { if (isUdf(time)) time = new Date(); var date = formatToDate(time); if (!date) return NaN; return date.setHours(0, 0, 0, 0); } export default getDayStartTime;
formatToDate.js
复制
/** * 格式化时间参数为日期对象 * @param {Date|number|string} time * @returns {Date} * * formatToDate(new Date); // => Date * formatToDate('2021-10'); // => Date * formatToDate(1636222480480); // => Date */ function formatToDate(time) { var date = time instanceof Date ? time : new Date(time); var dateTime = date.getTime(); if (!dateTime && dateTime !== 0) return null; return date; } export default formatToDate;