UNPKG

tools-for-js

Version:

基于babel构建的JavaScript前端工具库

218 lines (207 loc) 8.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformDate = exports.timeStamp = exports.isExpires = exports.getTimeDistance = exports.getExpiresEndTime = exports.getAfterNDays = exports.formatDate = exports.dateFormat = exports.createDate = exports.countDown = void 0; require("dayjs/locale/zh-cn"); var _relativeTime = _interopRequireDefault(require("dayjs/plugin/relativeTime")); var _dayjs = _interopRequireDefault(require("dayjs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } // ES 2015 _dayjs["default"].locale('zh-cn'); // 全局使用 /******* * @description: 创建时间对象 * @author: 琴时 * @param {*} date [时间戳|时间字符串|时间对象|或者为空] * @return {Date} */ var createDate = exports.createDate = function createDate(date) { var regexS = /^\d*$/; // 判断是否为时间戳 var regexT = /^(?=.*T)(?=.*).*$/; // 判断是否为时间字符串==>2021-05-19T16:00:00.000Z var regexC = /[\u4e00-\u9fa5]/; // 判断是否存在中文 ==> Thu May 20 2021 00:00:00 GMT+0800 (中国标准时间) if (!date) return new Date(); // 不传参数 if (regexS.test(date)) { date = parseInt(date); // 时间戳 } else if (regexC.test(date)) { date = Date.parse(date); } else if (typeof date === 'string' && !regexT.test(date)) { //兼容ios: 将时间字符串中的'-'替换成'/' 2021-05-20 00:00:00=>2021/05/20 00:00:00 date = "".concat(date).replace(/-/g, '/'); } return new Date(date); }; /******* * @description: 获取时间戳 * @author: 琴时 * @param {*} date [时间字符串]/[时间对象] * @return {Number} [时间戳] */ var timeStamp = exports.timeStamp = function timeStamp(date) { // const date = +new Date(date) //转换成时间戳 // const newDate = Date.now() //H5-生成当前时间戳 return createDate(date).getTime(); }; /******* * @description: 生成时间格式化 * @author: 琴时 * @param {date} 需要格式化的时间串(''/null/undefined ==> 默认当前时间) * @param {fmt} 格式化样式标识(年-月-日:YYYY-MM-DD)(不传默认返回年-月-日 时:分:秒) * @return {*} 返回格式化后的时间字符串 */ var dateFormat = exports.dateFormat = function dateFormat(date) { var fmt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'YYYY-MM-DD HH:mm:ss'; var dt = createDate(date); //创建时间对象 // 构造正则匹配:(value)padStart:字符串不满2位数,开头补全'0' var o = { '[Yy]+': dt.getFullYear(), //年 'M+': (dt.getMonth() + 1 + '').padStart(2, '0'), //月 'D+': (dt.getDate() + '').padStart(2, '0'), // 日 'H+': (dt.getHours() + '').padStart(2, '0'), // 时 'm+': (dt.getMinutes() + '').padStart(2, '0'), // 分 's+': (dt.getSeconds() + '').padStart(2, '0'), // 秒 'w+': '星期' + '日一二三四五六'.charAt(dt.getDay()), // 星期 'q+': Math.floor((dt.getMonth() + 3) / 3), // 季度 S: dt.getMilliseconds() // 毫秒 }; // 将正则匹配上的字符替换对应的时间值 for (var k in o) { if (new RegExp("(".concat(k, ")")).test(fmt)) { fmt = fmt.replace(RegExp.$1, o[k]); } } return fmt; }; var formatDate = exports.formatDate = function formatDate(date) { var fmt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'YYYY-MM-DD HH:mm:ss'; return (0, _dayjs["default"])(date).format(fmt); }; /******* * @description: 获取时间间隔 * @author: 琴时 * @param {*} st [开始时间] * @param {*} et [结束时间] * @param {String} key [索引] * @return {*} 处理好的时间间隔相关对象 */ var getTimeDistance = exports.getTimeDistance = function getTimeDistance(st, et, key) { st = timeStamp(st); // 开始时间戳 et = timeStamp(et); // 结束时间戳 var times = (et - st) / 1000; // 剩余时间总的秒数 var dd = parseInt(times / 60 / 60 / 24).toString().padStart(2, '0'); //天 var hh = parseInt(times / 60 / 60 % 24 + '').toString().padStart(2, '0'); //时 var mm = parseInt(times / 60 % 60 + '').toString().padStart(2, '0'); //分 var ss = parseInt(times % 60 + '').toString().padStart(2, '0'); //秒 if (ss < 0 || mm < 0 || hh < 0 || dd < 0) return null; var obj = { timeStr: "".concat(dd, "\u5929").concat(hh, "\u65F6").concat(mm, "\u5206").concat(ss, "\u79D2"), timeStamp: times, //剩余时间秒数 timeDistance: { dd: dd, hh: hh, mm: mm, ss: ss }, week: dd > 0 && dd < 7, //7天内 month: dd > 0 && dd < 30, //30天内 year: dd > 0 && dd < 365 //一年内 }; return obj[key] || obj; }; /******* * @description: 倒计时 * @author: 琴时 * @param {*} date [截止时间] * @param {String} key [索引] * @return {*} [倒计时间|结束则返回null] */ var countDown = exports.countDown = function countDown(date) { var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'cn'; var nt = +new Date(); // 当前时间戳 date = timeStamp(date); // 结束时间戳 var times = (date - nt) / 1000; // 剩余时间总的秒数 var dd = parseInt(times / 60 / 60 / 24).toString().padStart(2, '0'); // 天 var hh = parseInt(times / 60 / 60 % 24 + '').toString().padStart(2, '0'); //时 var mm = parseInt(times / 60 % 60 + '').toString().padStart(2, '0'); // 分 var ss = parseInt(times % 60 + '').toString().padStart(2, '0'); // 当前的秒 if (times <= 0) return null; //结束返回null var result = { cn: "".concat(dd, "\u5929").concat(hh, "\u65F6").concat(mm, "\u5206").concat(ss, "\u79D2"), ss: parseInt(times) //剩余时间秒数 }; return result[key]; }; /******* * @description: 距离当前时间状况 * @author: 琴时 * @param {*} date * @param {String} diff [year:年, month:月, week:周, day:天, hour:小时, minute:分钟, second:秒] * @return {String} */ var transformDate = exports.transformDate = function transformDate(date, diff) { _dayjs["default"].extend(_relativeTime["default"]); var transDay = (0, _dayjs["default"])(date).fromNow().replace(/\s+/g, ''); if (transDay === '几秒前') transDay = '刚刚'; if (diff) { var diffObj = { year: '年', month: '月', week: '周', day: '天' }; // 匹配transDay有无该值==>超出界限则显示日期 if (new RegExp("(".concat(diffObj[diff], ")")).test(transDay)) { transDay = (0, _dayjs["default"])(date).format('YYYY-MM-DD'); } } return transDay; }; /******* * @description: 获取结束时间 * @author: 琴时 * @param {*} startTime [开始时间] * @param {*} expires [有效期/秒] * @return {Date} */ var getExpiresEndTime = exports.getExpiresEndTime = function getExpiresEndTime(st, expires) { st = timeStamp(st); //开始时间戳 expires = expires * 1000; //有效期毫秒 return new Date(st + expires); }; /******* * @description: 判断是否过期 * @author: 琴时 * @param {*} st [开始时间] * @param {*} et [当前时间] * @param {*} expires [有效期/毫秒] * @return {*} [过期:true|未过期:false] */ var isExpires = exports.isExpires = function isExpires(st, et, expires) { if (!st || !et || !expires) return true; // 参数不完整默认过期 st = timeStamp(st); //开始时间戳 et = timeStamp(et); // 结束时间戳 var differTime = et - st; //间隔毫秒 // 如果间隔毫秒 >= 有效期毫秒,则过期 return differTime >= expires; }; /******* * @description: 计算指定时间到间隔n天的时间 * @author: 琴时 * @param {*} date [指定时间] * @param {number} severalDays [间隔天数] * @return {Date} */ var getAfterNDays = exports.getAfterNDays = function getAfterNDays(date, severalDays) { date = timeStamp(date); //指定时间的时间戳 return new Date(date + severalDays * 24 * 60 * 60 * 1000); };