tools-for-js
Version:
基于babel构建的JavaScript前端工具库
218 lines (207 loc) • 8.01 kB
JavaScript
;
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);
};