内容部分代码为csdn大佬博客搬过来的,因为代码是旧代码,copy的代码地址忘记了

先看结果
第一种:计算周期一个月

[{ beginDate: '2019-06-01', endDate: '2019-06-30' },{ beginDate: '2019-07-01', endDate: '2019-07-31' },{ beginDate: '2019-08-01', endDate: '2019-08-31' },{ beginDate: '2019-09-01', endDate: '2019-09-30' },{ beginDate: '2019-10-01', endDate: '2019-10-31' },{ beginDate: '2019-11-01', endDate: '2019-11-30' },{ beginDate: '2019-12-01', endDate: '2019-12-31' },{ beginDate: '2020-01-01', endDate: '2020-01-31' },{ beginDate: '2020-02-01', endDate: '2020-02-29' },{ beginDate: '2020-03-01', endDate: '2020-03-31' },{ beginDate: '2020-04-01', endDate: '2020-04-30' },{ beginDate: '2020-05-01', endDate: '2020-05-31' },{ beginDate: '2020-06-01', endDate: '2020-06-30' }
]

第二种:除去首月,最后一个月,中间时间段按每月1日开始,最后一天结束

[{ beginDate: '2022-06-15', endDate: '2022-06-30' },{ beginDate: '2022-07-01', endDate: '2022-07-31' },{ beginDate: '2022-08-01', endDate: '2022-08-31' },{ beginDate: '2022-09-01', endDate: '2022-09-30' },{ beginDate: '2022-10-01', endDate: '2022-10-31' },{ beginDate: '2022-11-01', endDate: '2022-11-30' },{ beginDate: '2022-12-01', endDate: '2022-12-31' },{ beginDate: '2023-01-01', endDate: '2023-01-31' },{ beginDate: '2023-02-01', endDate: '2023-02-28' },{ beginDate: '2023-03-01', endDate: '2023-03-31' },{ beginDate: '2023-04-01', endDate: '2023-04-30' },{ beginDate: '2023-05-01', endDate: '2023-05-31' },{ beginDate: '2023-06-01', endDate: '2023-06-15' }
]

第一种结果实现代码

function dateCutByMonth_1(beginDate, endDate) {let _beginDate = []let _endDate = []let monthNum = mouthDifferCount(beginDate, endDate)if (monthNum) {_beginDate = getBeginDate(monthNum, beginDate, endDate)_endDate = getEndDate(beginDate, _beginDate, endDate)} else {_endDate = [{ beginDate, endDate }]}return _endDate
};// 计算每个月的开始时间
function getBeginDate(numMonth, beginDate, endDate) {let _beginDay = beginDate.split('-')[2]let _endDya = endDate.split('-')[2]let nextForDate = beginDatelet dateCutList = []for (let i = 0; i < numMonth; i++) {var now = new Date(nextForDate); // 能够传值调式 now = new Date(2019,2,30); 今天是3月30号var year = now.getFullYear();//getYear()+1900=getFullYear()var month = now.getMonth() + 1;//0-11表示1-12月// var day = now.getDate(); // 当天日期var day = _beginDayif (parseInt(month) < 10) {month = "0" + month;}now = year + '-' + month + '-' + day; // 若是取当月日期可直接 return 返回var nextMonth = parseInt(month) + 1;nextMonth = nextMonth < 10 ? '0' + nextMonth : nextMonth; // 获取下个月个月的值if (nextMonth > 12) {year += 1nextMonth = '01'}var nextSize = new Date(year, parseInt(month) + 1, 0).getDate();//下月总天数if (nextSize < parseInt(day)) { // 若是下个月总天数小于本月今天,取下个月最后一天  nextForDate = year + '-' + nextMonth + '-' + nextSize;dateCutList.push(nextForDate);} else if (nextSize >= parseInt(day)) {nextForDate = year + '-' + nextMonth + '-' + day;dateCutList.push(nextForDate);}}return dateCutList
}// 计算每个月的结束时间
function getEndDate(beginDate, dateList, endDate) {let _dateList = []dateList.unshift(beginDate)dateList.forEach((item, index) => {// if (dateList[index + 1]) {let date1 = new Date(dateList[index + 1])let date2 = new Date(date1.getTime() - 24 * 60 * 60 * 1000)let y2 = date2.getFullYear();let m2 = date2.getMonth() + 1 < 10 ? "0" + (date2.getMonth() + 1) : date2.getMonth() + 1;let d2 = date2.getDate() < 10 ? "0" + date2.getDate() : date2.getDate();let endDate = y2 + "-" + m2 + "-" + d2_dateList.push({ "beginDate": item, "endDate": endDate })// }})_dateList[_dateList.length - 1]['endDate'] = endDatelet endBeginDateGetTime = new Date(_dateList[_dateList.length - 1]['beginDate']).getTime()let endDateGetTime = new Date(_dateList[_dateList.length - 1]['endDate']).getTime()if (endBeginDateGetTime >= endDateGetTime) {_dateList.pop()}return _dateList;
}// 计算两个月份相差时间差
function mouthDifferCount(startDate, endDate) {startDate = startDate.split('-');// 得到月数startDate = parseInt(startDate[0]) * 12 + parseInt(startDate[1]);// 拆分年月日endDate = endDate.split('-');// 得到月数endDate = parseInt(endDate[0]) * 12 + parseInt(endDate[1]);var times = Math.abs(startDate - endDate);return times
}console.log(dateCutByMonth_1('2019-06-01', '2020-06-30'));  // 2020年2月29日
console.log(dateCutByMonth_1('2022-06-19', '2023-06-30'));
console.log(dateCutByMonth_1('2022-05-31', '2023-05-31'));

第二种结果实现代码

/**
* 将指定日期区间按月份分割
* @param {Object} beginDate 开始日期
* @param {Object} endDate 结束日期
* @return {Array} 分割好的array数组
*/
function dateCutByMonth(beginDate, endDate) {//分割好的数组var dateCutList = new Array();var b_date = new Date(beginDate);var e_date = new Date(endDate);//获取各个的年份var b_year = parseInt(b_date.getFullYear());var e_year = parseInt(e_date.getFullYear());//获取各个的月份var b_month = parseInt(b_date.getMonth()) + 1;var e_month = parseInt(e_date.getMonth()) + 1;//获取日期之间想差的月数;var month_list = monthList();//按月份分割日期for (var i = 0; i < month_list.length; i++) {//当前月开始日期:第一天var i_b_date = new Date(month_list[i]);i_b_date.setDate(1);//当前月最后一天var i_e_date = new Date(month_list[i]);i_e_date.setMonth(i_e_date.getMonth() + 1);i_e_date.setDate(1);i_e_date.setDate(i_e_date.getDate() - 1);//第一次循环:开始月份if (i == 0) {var i_e_ymd = parseTime(i_e_date).split(" ")[0];dateCutList.push({ "beginDate": beginDate, "endDate": i_e_ymd });//除第一次和最后一次循环:中间月份  } else if (i != 0 && i != month_list.length - 1) {var i_b_ymd = parseTime(i_b_date).split(" ")[0];var i_e_ymd = parseTime(i_e_date).split(" ")[0];dateCutList.push({ "beginDate": i_b_ymd, "endDate": i_e_ymd });//   //最后一次循环:结束月份} else if (i == month_list.length - 1) {var i_b_ymd = parseTime(i_b_date).split(" ")[0];dateCutList.push({ "beginDate": i_b_ymd, "endDate": endDate });}}console.log(dateCutList);return dateCutList;//---------------------------------------------------------------------------------------------------//-------------------------------以下为工具函数-------------------------------------------------------//---------------------------------------------------------------------------------------------------/*** 获取日期区间的月份集合*/function monthList() {//相差的月份总数var result = new Array();var b = new Date(b_year, b_month - 1, 1);var e = new Date(e_year, e_month - 1, 1);while (b < e) {result.push(b.getFullYear() + "-" + (b.getMonth() + 1));b.setMonth(b.getMonth() + 1);}result.push(e_year + "-" + e_month);return result;}/*** 日期格式化方法 */function parseTime(time, pattern) {if (arguments.length === 0 || !time) {return null}const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'let dateif (typeof time === 'object') {date = time} else {if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {time = parseInt(time)} else if (typeof time === 'string') {time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm),'');}if ((typeof time === 'number') && (time.toString().length === 10)) {time = time * 1000}date = new Date(time)}const formatObj = {y: date.getFullYear(),m: date.getMonth() + 1,d: date.getDate(),h: date.getHours(),i: date.getMinutes(),s: date.getSeconds(),a: date.getDay()}const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {let value = formatObj[key]// Note: getDay() returns 0 on Sundayif (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }if (result.length > 0 && value < 10) {value = '0' + value}return value || 0})return time_str
}
}dateCutByMonth('2022-06-29','2023-06-29')

租赁合同一般会有需求按照月,季,年缴费

这个方法有点取巧,勤快的话,还是分开写季和年的时间吧

let intervalUnit = 1;   // 1为月      2为季 3为年
dateSplit(data) {let num = intervalUnit == 2 ? 3 : 12,result = [],lastResult = [];for (let i = 0; i < data.length; i += num) {result.push(data.slice(i, i + num));}for (let i = 0; i < result.length; i++) {lastResult.push({beginDate: result[i][0].beginDate,endDate: result[i][result[i].length - 1].endDate,});}return lastResult;
},

js时间分割——主要用途——租赁合同时间计算(两种时间分割方式,可以按月,季,年分割)相关推荐

  1. oracle时间相减得到天_oracle中计算两个日期之间得天数、月数、年数

    1.相差天数(两个日期相减) --Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_ ...

  2. 在线计算两个时间相差多少秒,分钟,天

    在线计算两个时间相差多少秒,分钟,天 在线计算两个时间相差多少秒,分钟,天 本工具支持对两个格式过后的时间计算相差的天数,小时数,分钟数,秒数,毫秒数. 本工具支持对两个格式过后的时间计算相差的天数, ...

  3. JS 计算两个时间的间隔

    js 计算两个时间之间间隔的天数 var start = new Date('2019-12-10'); //开始的时间 var end = new Date('2020-01-09'); //结束的 ...

  4. js计算两个时间是否大于一个月

    转载自 miskss /*** 获取某年某月的总天数* @param {Number} year 获取天数的年份* @param {Number} month 获取天数的月份* @returns {N ...

  5. JS制作倒计时--计算两个时间点的时间差

    计算当前时间和一个指定时间点的时间差,是很常见的一个特效. 比如: 一些电商网站的倒计时秒杀. 高考倒计时 这些效果用 JavaScript 来实现,简直易如反掌. 主要用到的知识点: 时间对象:获取 ...

  6. python的datetime举例_Python datetime库计算两个时间点之间的分钟(秒、天)数

    计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...

  7. java如何计算时间天数差,java计算两个时间相差天数的方法汇总

    问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是 ...

  8. 处理时间_3_计算两个时间列工作日差值

    计算两个时间列工作日差值 需求描述 需求:对EMP表里员工KING和SMITH的hiredate入职时间差,这里单位是天且是工作日时间,即周末不计算在内. 解决方法:通过DATEDIFF函数来完成. ...

  9. 处理时间_2_计算两个时间列的差值

    计算两个时间列的差值 需求描述 需求:对EMP表里员工KING和SMITH的hiredate入职时间差,这里单位是分钟.小时.天.周.月.年. 解决方法:通过DATEDIFF函数来完成. 注: 数据库 ...

最新文章

  1. 如何使用OpenCV自动校正文本图像
  2. Struts2升级注意事项
  3. Java 洛谷 P1089 津津的储蓄计划讲解
  4. Android系统(109)---ADB命令
  5. 织梦CMS被挂马特征汇总
  6. 适合练手的10个前端实战项目(附视频+源码)
  7. GooFlow插件IE8及以下报无法设置未定义或 null 引用的属性“value”错误
  8. html记事本制作静态网页,记事本编辑html静态网页设计(3页)-原创力文档
  9. 数据分析——如何构建数据指标体系
  10. pulseaudio,gmediarender
  11. 英语数字转换器(POJ NO.1123)
  12. 安卓软件开发需要学什么你知道吗?
  13. 小车自动往返工作原理_自动往返小汽车
  14. RTKLIB学习总结(五)后处理函数调用流程、postpos、execses_b、execses_r、execses、procpos、rtkpos
  15. 微信企业号和微信公众号使用js-sdk说明和注意事项
  16. 优质的计算机专业书籍有哪些?
  17. 谈谈企业的持续交付流水线设计
  18. ESP8266-Arduino编程实例-APDS-9930环境光和趋近感器驱动
  19. 「代码家」的学习过程和学习经验分享【转】
  20. 周易测算网站H5源码在线起名运势测算网站系统源码

热门文章

  1. 流行QQ在线客服代码
  2. 基于主成分分析PCA的人脸识别
  3. 基于ARM的微机原理-Cortex-M3处理器
  4. android hdmi 监听,对于HDMI设备连接状态的监听
  5. android 代码 drawable,Android Drawable完全解析(一):Drawable源码分析(中)
  6. 7-4 sdut-C语言实验-分割整数
  7. STM32之ADC的学习心得(std+HAL)
  8. linux——tail
  9. LUN与LVM的关系
  10. 我不接私活了,抱歉!