87,995
社区成员




- /**调用
- * onload 内 :
- * let dateType = this.data.dateType; // h 计算 小时 day 计算 天
- let data = dateChoose.dateChoose.init(dateType); //onload 内初始化
- 滚动选择器 日期数据
- data.dateTimeArray
- 滚动选择器 当前选中
- data.dateIndex
- 获取 请假小时 or 请假天数
- let getHours = dateChoose.dateChoose.countHours('2019-02-15 下午', '2019-02-18 上午', dateType)
- */
- var dateTimePicker = {
- init(dateType, startYear) {
- return this.dateTimePicker(dateType, startYear);
- },
- /**获取月 日 */
- getMonthDay(year, month) {
- var flag = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0),
- array = null;
- switch (month) {
- case '01':
- case '03':
- case '05':
- case '07':
- case '08':
- case '10':
- case '12':
- array = this.getLoopArray(1, 31)
- break;
- case '04':
- case '06':
- case '09':
- case '11':
- array = this.getLoopArray(1, 30)
- break;
- case '02':
- array = flag ? this.getLoopArray(1, 29) : this.getLoopArray(1, 28)
- break;
- default:
- array = '月份格式不正确,请重新输入!'
- }
- return array;
- },
- /**获取每个月的日期 */
- getLoopArray(start, end) {
- var start = start || 0;
- var end = end || 1;
- var array = [];
- for (var i = start; i <= end; i++) {
- array.push(this.withData(i));
- }
- return array;
- },
- /**初始化 日 */
- withData(param) {
- return param < 10 ? '0' + param : '' + param;
- },
- /**
- * 当前时间的处理
- */
- getNewDateArry(dateType) {
- var newDate = new Date();
- var year = this.withData(newDate.getFullYear()),
- mont = this.withData(newDate.getMonth() + 1),
- date = this.withData(newDate.getDate());
- if (dateType == 'd') {
- var hour = this.withData(newDate.getHours());
- if (hour < 12) {
- hour = '上午';
- } else {
- hour = '下午';
- }
- return [year, mont, date, hour];
- } else {
- var hour = this.withData(newDate.getHours());
- var minu = this.withData(newDate.getMinutes());
- return [year, mont, date, hour, minu];
- }
- },
- /**
- * 初始 滚动选择器数据
- */
- dateTimePicker(dateType, startYear) {
- // 返回默认显示的数组和联动数组的声明
- var dateIndex = [];
- var dateTimeArray = dateType == 'd' ? [[], [], [], []] : [[], [], [], [], []];
- var start = 1978;
- var end = 2100;
- // 默认开始显示数据
- var defaultDate = startYear ? [...startYear.split(' ')[0].split('-'), ...startYear.split(' ')[1].split(':')] : this.getNewDateArry(dateType);
- // 处理联动列表数据
- /*年月日 时分 or 下午上午*/
- dateTimeArray[0] = this.getLoopArray(start, end);
- dateTimeArray[1] = this.getLoopArray(1, 12);
- dateTimeArray[2] = this.getMonthDay(defaultDate[0], defaultDate[1]);
- if (dateType == 'd') {
- dateTimeArray[3] = ['上午', '下午']
- } else {
- dateTimeArray[3] = this.getLoopArray(0, 23);
- dateTimeArray[4] = this.getLoopArray(0, 59);
- }
- dateTimeArray.forEach((current, index) => {
- dateIndex.push(current.indexOf(defaultDate[index]));
- });
- dateIndex = dateIndex.map((item) => {
- if (item < 0) {
- item = 0
- }
- return item;
- });
- return {
- dateTimeArray: dateTimeArray, //滚动下拉数据组
- dateIndex: dateIndex //当前的时间index
- }
- },
- /**
- * 计算小时
- * bDate 开始时间
- * eDate 结束时间
- * dateType 计算时间类型 // h 计算 小时 day 计算 天
- */
- countHours(bDate, eDate, dateType) {
- if (dateType == 'd') {
- let isVaild = this.isValidDateTime(bDate, eDate, dateType); // 检查选择时间是否合理
- if (isVaild == false) {
- return false;
- } else {
- let bDateDay = bDate.split(' '),
- bDateDayY = new Date(bDateDay[0]),//开始时间
- bDateDayT = bDateDay[1];
- let eDateDay = eDate.split(' '),
- eDateDayY = new Date(eDateDay[0]),//结束时间
- eDateDayT = eDateDay[1];
- let bisweek = bDateDayY.getDay(); //获取开始时间是周几
- let eisweek = eDateDayY.getDay(); //获取结束时间是周几
- if ((bisweek != 0 && bisweek != 6) && (eisweek != 0 && eisweek != 6)) {
- var mosconds = eDateDayY.getTime() - bDateDayY.getTime() //时间 差的 毫秒数
- //计算出相差天数
- let days = (eDateDayY - bDateDayY) / 1000 / 3600 / 24;
- let weeks = this.checkWeekend(bDateDayY, eDateDayY); //周末天数
- if (weeks > 0) {
- days = days - weeks;
-
- if ((bDateDayT == '下午' && eDateDayT == '下午') || (bDateDayT == '下午' && eDateDayT == '上午')) {
- days = days - 0.5;
- }
- if ((bDateDayT == '上午' && eDateDayT == '上午') || (bDateDayT == '下午')) {
- days = days + 0.5;
- }
- return days;
- } else {
- if (mosconds == 0) { //同天
- if ((bDateDayT == '上午' && eDateDayT == '下午')) {
- days = days + 1;
- }
- if ( eDateDayT == '上午') {
- days = days + 0.5;
- }
- return days;
- }else{
- if ((bDateDayT == '上午' && eDateDayT == '下午')) {
- days = days + 1;
- }
- if (eDateDayT == '上午') {
- days = days + 0.5;
- }
- return days;
- }
-
- }
- } else if ((bisweek == 0 || bisweek == 6) || (eisweek == 0 || eisweek == 6)) {
- if (bisweek == 0 || bisweek == 6) {
- return '开始日期不可为周末';
- }
- if (eisweek == 0 || eisweek == 6) {
- return '结束日期不可为周末';
- }
- }
- }
- } else {
- let isVaild = this.isValidDateTime(bDate, eDate, dateType); // 检查选择时间是否合理
- if (isVaild == false) {
- return false;
- } else {
- let beginDate = new Date(bDate); //开始时间
- let endDate = new Date(eDate); //结束时间
- let bisweek = beginDate.getDay(); //获取开始时间是周几
- let eisweek = endDate.getDay(); //获取结束时间是周几
- let hoursSece = 3600 * 1000; //1 小时
- let weekTime = 7.5, //每日 7.5 小时
- noonTime = 1.5, // 午休 1.5小时
- beginDateS = beginDate.toLocaleDateString(), // 开始日期
- endDateS = endDate.toLocaleDateString();//结束日期
- let deltaTime = endDate - beginDate; //结束时间 - 开始时间 得到 时间差
- let deltaTimeHours = Number((deltaTime / hoursSece).toFixed(2)); /**时间差 小时 */
- // 开始时间 结束时间 都不是周末
- if ((bisweek != 0 && bisweek != 6) && (eisweek != 0 && eisweek != 6)) {
- let bdateH = beginDate.getHours(); //开始时间 小时
- let bdateM = beginDate.getMinutes(); //开始时间 分钟
- let edateH = endDate.getHours(); //结束时间 小时
- let edateM = endDate.getMinutes(); //结束时间 分钟
- //同一天
- if (beginDateS === endDateS) {
- if (bdateH < 12 && edateH > 12) {
- deltaTimeHours = deltaTimeHours - noonTime;
- }
- if (bdateH < 9) {
- deltaTimeHours = deltaTimeHours - (9 - bdateH);
- }
- if ((bdateH <= 9 && bdateH < 12) && edateH > 18) {
- deltaTimeHours = deltaTimeHours - (deltaTimeHours - weekTime);
- }
- return deltaTimeHours.toFixed(2);
- } else {
- /**跨天 */
- let weeks = this.checkWeekend(beginDate, endDate); //周末天数
- let noweenTime = (24 - weekTime);//非工作 小时
- let bdate = beginDate.getFullYear() + '-' + (Number(beginDate.getMonth()) + 1) + '-' + beginDate.getDate();
- let edate = endDate.getFullYear() + '-' + (Number(endDate.getMonth()) + 1) + '-' + endDate.getDate();
- let days = (new Date(edate) - new Date(bdate)) / 1000 / 3600 / 24;
- if (days > 1){
- if (weeks>0){
- let jqTimes = deltaTimeHours - (weeks * 24) - noweenTime;
- return jqTimes ;
- }else{
- deltaTimeHours = deltaTimeHours - (noweenTime) * days;
- return deltaTimeHours.toFixed(2);
- }
- }else{
- deltaTimeHours = deltaTimeHours - noweenTime;
- return deltaTimeHours.toFixed(2);
- }
- }
- } else if ((bisweek == 0 || bisweek == 6) || (eisweek == 0 || eisweek == 6)) {
- if (bisweek == 0 || bisweek == 6) {
- return '开始日期不可为周末';
- }
- if (eisweek == 0 || eisweek == 6) {
- return '结束日期不可为周末';
- }
-