UNPKG

@hzy1123581324/z-view-ui

Version:

z-view-ui是使用vue3开发的组件,开发中,有部分组件功能未实现,慎用

218 lines (212 loc) 10.1 kB
export function timeFormat(timestamp = null, fmt = 'yyyy-mm-dd') { // 其他更多是格式化有如下: // yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 timestamp = parseInt(timestamp); // 如果为null,则格式化当前时间 if (timestamp == null) timestamp = Number(new Date()); // 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位) if (timestamp.toString().length == 10) timestamp *= 1000; let date = new Date(timestamp); let ret; let opt = { "y+": date.getFullYear().toString(), // 年 "m+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "h+": date.getHours().toString(), // 时 "M+": date.getMinutes().toString(), // 分 "s+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } /** * 时间戳转为多久之前 * @param String timestamp 时间戳 * @param String | Boolean format 如果为时间格式字符串,超出一定时间范围,返回固定的时间格式; * 如果为布尔值false,无论什么时间,都返回多久以前的格式 */ export function timeFrom(timestamp = null, format = 'yyyy-mm-dd') { if (timestamp == null) timestamp = Number(new Date()); timestamp = parseInt(timestamp); // 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位) if (timestamp.toString().length == 10) timestamp *= 1000; var timer = (new Date()).getTime() - timestamp; timer = parseInt(timer / 1000); // 如果小于5分钟,则返回"刚刚",其他以此类推 let tips = ''; // console.log(timer); switch (true) { case timer < 300: tips = '刚刚'; break; case timer >= 300 && timer < 3600: tips = parseInt(timer / 60) + '分钟前'; break; case timer >= 3600 && timer < 86400: tips = parseInt(timer / 3600) + '小时前'; break; case timer >= 86400 && timer < 2592000: tips = parseInt(timer / 86400) + '天前'; break; default: // 如果format为false,则无论什么时间戳,都显示xx之前 if(format === false) { if(timer >= 2592000 && timer < 365 * 86400) { tips = parseInt(timer / (86400 * 30)) + '个月前'; } else { tips = parseInt(timer / (86400 * 365)) + '年前'; } } else { tips = timeFormat(timestamp, format); } } return tips; } /** * @description 获取指定时区时间 * @param {Number,String} timezone * @return {Date} 指定时区时间 */ export function getTimeZoneDate(timezone,date = new Date()) { var offset_GMT = date.getTimezoneOffset(); // 本地时间和格林威治的时间差,单位为分钟 var nowDate = date.getTime(); // 本地时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数 var targetDate = new Date(nowDate + offset_GMT * 60 * 1000 + timezone * 60 * 60 * 1000); return targetDate; } /** * @description 根据传入时间,转换差异时区时间 * @param {Date} date 时间 * @param {Number,String} timezone 时区 * @return {Date} 转换的时间 */ export function getTimeToZoneDate(date = new Date(), timezone) { var nowDate = date.getTime(); // 当前时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数 var targetDate = new Date(nowDate - timezone * 60 * 60 * 1000); return targetDate; } /** * @description 获取当前时区名称 * @return {String} 返回时区 */ export function getZoneName() { var tmSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0)); var so = -1 * tmSummer.getTimezoneOffset(); var tmWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0)); var wo = -1 * tmWinter.getTimezoneOffset(); console.log(so + " " + wo); if (-660 == so && -660 == wo) return 'Pacific/Midway'; if (-600 == so && -600 == wo) return 'Pacific/Tahiti'; if (-570 == so && -570 == wo) return 'Pacific/Marquesas'; if (-540 == so && -600 == wo) return 'America/Adak'; if (-540 == so && -540 == wo) return 'Pacific/Gambier'; if (-480 == so && -540 == wo) return 'US/Alaska'; if (-480 == so && -480 == wo) return 'Pacific/Pitcairn'; if (-420 == so && -480 == wo) return 'US/Pacific'; if (-420 == so && -420 == wo) return 'US/Arizona'; if (-360 == so && -420 == wo) return 'US/Mountain'; if (-360 == so && -360 == wo) return 'America/Guatemala'; if (-360 == so && -300 == wo) return 'Pacific/Easter'; if (-300 == so && -360 == wo) return 'US/Central'; if (-300 == so && -300 == wo) return 'America/Bogota'; if (-240 == so && -300 == wo) return 'US/Eastern'; if (-240 == so && -240 == wo) return 'America/Caracas'; if (-240 == so && -180 == wo) return 'America/Santiago'; if (-180 == so && -240 == wo) return 'Canada/Atlantic'; if (-180 == so && -180 == wo) return 'America/Montevideo'; if (-180 == so && -120 == wo) return 'America/Sao_Paulo'; if (-150 == so && -210 == wo) return 'America/St_Johns'; if (-120 == so && -180 == wo) return 'America/Godthab'; if (-120 == so && -120 == wo) return 'America/Noronha'; if (-60 == so && -60 == wo) return 'Atlantic/Cape_Verde'; if (0 == so && -60 == wo) return 'Atlantic/Azores'; if (0 == so && 0 == wo) return 'Africa/Casablanca'; if (60 == so && 0 == wo) return 'Europe/London'; if (60 == so && 60 == wo) return 'Africa/Algiers'; if (60 == so && 120 == wo) return 'Africa/Windhoek'; if (120 == so && 60 == wo) return 'Europe/Amsterdam'; if (120 == so && 120 == wo) return 'Africa/Harare'; if (180 == so && 120 == wo) return 'Europe/Athens'; if (180 == so && 180 == wo) return 'Africa/Nairobi'; if (240 == so && 180 == wo) return 'Europe/Moscow'; if (240 == so && 240 == wo) return 'Asia/Dubai'; if (270 == so && 210 == wo) return 'Asia/Tehran'; if (270 == so && 270 == wo) return 'Asia/Kabul'; if (300 == so && 240 == wo) return 'Asia/Baku'; if (300 == so && 300 == wo) return 'Asia/Karachi'; if (330 == so && 330 == wo) return 'Asia/Calcutta'; if (345 == so && 345 == wo) return 'Asia/Katmandu'; if (360 == so && 300 == wo) return 'Asia/Yekaterinburg'; if (360 == so && 360 == wo) return 'Asia/Colombo'; if (390 == so && 390 == wo) return 'Asia/Rangoon'; if (420 == so && 360 == wo) return 'Asia/Almaty'; if (420 == so && 420 == wo) return 'Asia/Bangkok'; if (480 == so && 420 == wo) return 'Asia/Krasnoyarsk'; if (480 == so && 480 == wo) return 'Beijing';//return 'Australia/Perth'; if (540 == so && 480 == wo) return 'Asia/Irkutsk'; if (540 == so && 540 == wo) return 'Asia/Tokyo'; if (570 == so && 570 == wo) return 'Australia/Darwin'; if (570 == so && 630 == wo) return 'Australia/Adelaide'; if (600 == so && 540 == wo) return 'Asia/Yakutsk'; if (600 == so && 600 == wo) return 'Australia/Brisbane'; if (600 == so && 660 == wo) return 'Australia/Sydney'; if (630 == so && 660 == wo) return 'Australia/Lord_Howe'; if (660 == so && 600 == wo) return 'Asia/Vladivostok'; if (660 == so && 660 == wo) return 'Pacific/Guadalcanal'; if (690 == so && 690 == wo) return 'Pacific/Norfolk'; if (720 == so && 660 == wo) return 'Asia/Magadan'; if (720 == so && 720 == wo) return 'Pacific/Fiji'; if (720 == so && 780 == wo) return 'Pacific/Auckland'; if (765 == so && 825 == wo) return 'Pacific/Chatham'; if (780 == so && 780 == wo) return 'Pacific/Enderbury' if (840 == so && 840 == wo) return 'Pacific/Kiritimati'; return 'US/Pacific'; } /** * @description 获取当前时区 * @return {Number} 时区 */ export function getCurrentZone() { var timezone = new Date().getTimezoneOffset() / 60 * -1;//获取时区; //目标时区时间,东八区 东时区正数 西市区负数 return timezone; } /** * @description 时间格式化 * @param {Date} date * @return {String} 格式化时间 */ export function formatDate2Str(date) { //输出时间 var yy = date.getFullYear() var MM = date.getMonth() + 1 // +1使用new Date(YYYY,MM,DD,hh,mm,ss)这种方式月数不会默认-1但是使用new Date('YYYY-MM-DD hh:mm:ss')会默认-1 MM = MM < 10 ? '0' + MM : MM var dd = date.getDate() dd = dd < 10 ? '0' + dd : dd var hh = date.getHours() hh = hh < 10 ? '0' + hh : hh var mm = date.getMinutes() mm = mm < 10 ? '0' + mm : mm var ss = date.getSeconds() ss = ss < 10 ? '0' + ss : ss return yy + '-' + MM + '-' + dd + ' ' + hh + ':' + mm + ':' + ss; } /** * @description 根据北京时间,转换成当前时区时间 * @param {Date} bjTime * @return {String} */ export function calcBeiJing2CurrentZoneTime(bjTime) { var bjZone = 8;//中国时区 var timezone = getCurrentZone();// 当前时区 ,美国 -4,中国 8 var dt = getTimeToZoneDate(bjTime, bjZone - timezone); var str = formatDate2Str(dt); return str; // console.log(str); // $("#time").html(str); }