JS 中日期计算

<script>
    //获取当前日期
    var getNowDate = function () {
        var d = new Date();
        var year = d.getFullYear();
        var month = d.getMonth() + 1;
        var day = d.getDate();
        var dateStr = year + '-' + getFormatDate(month) + '-' + getFormatDate(day);
        return dateStr;
    }
        
     //格式化日期的月份或天数的显示(小于10,在前面增加0)
    function getFormatDate(value) {
        var result;
        result = value < 10 ? ("0" + value) : value;
        return result;
    }
        
    //获取与毫秒数的转化比例(相差天数:1,相差小时数:2,相差分钟数:3,相差秒数:4)
    var getDifferScale = function (value) {
        var format;
        //获取转化比(天数跟毫秒数的比例)
        if (value == 1) {
            format = parseFloat(24 * 60 * 60 * 1000);
        }
            //获取转化比(小时数跟毫秒数的比例)
        else if (value == 2) {
            format = parseFloat(60 * 60 * 1000);
        }
            //获取转化比(分钟数跟毫秒数的比例)
        else if (value == 3) {
            format = parseFloat(60 * 1000);
        }
            //获取转化比(秒数跟毫秒数的比例)
        else if (value == 4) {
            format = parseFloat(1000);
        }
        return format;
    }
    
    //获取两个日期的相差日期数(differ 相差天数:1、相差小时数:2、相差分钟数:3、相差秒数:4)
    var getDifferDate = function (firstDate, secondDate, differ) {
        //1)将两个日期字符串转化为日期对象
        var startDate = new Date(firstDate);
        var endDate = new Date(secondDate);
        //2)计算两个日期相差的毫秒数
        var msecNum = endDate.getTime() - startDate.getTime();
        //3)计算两个日期相差的天数
        var dayNum = Math.floor(msecNum /getDifferScale(differ));
        return dayNum;
    }
    /**
 * 按某个属性分组
 * @param {*} arr 
 * @param {*} key 属性
 * @returns 
 */
function groupBy(arr, key) {
    return arr.reduce((acc, curr) => {
      (acc[curr[key]] = acc[curr[key]] || []).push(curr);
      return acc;
    }, {});
  }
/**
 * 根据日期查询当前月份的日期集合,
 * @param datetime '2023-08-04' 或'2023-08'
 */
 const currentMonthDayTimes=function(datetime){
    let array=datetime.split('-')
    let month=array[1]
    let year=array[0]
    //当小于10->01,02,03...
    if(month<10 && !month.startsWith("0")){
        month='0'+month;
    }
    // 获取当前月有多少天
    let currentMonthDays = new Date(year, month, 0).getDate();
    // 当前月份所有日期集合
    let currentMonthDateArr = [];
    for (let day = 1; day <= currentMonthDays; day++) {
        // 年月日(yyyy-MM-dd)
        let dateItem = year + "-" + month + "-" + (day < 10 ? '0' + day : day);
        currentMonthDateArr.push(dateItem);
    }
    return currentMonthDateArr;
}

 /**
 * 计算当天每隔多少分钟时间集合
 * @param {*} step  间隔分钟
 * @returns 
 */
const timeInterval=function timeInterval (step) {   //  step = 间隔的分钟
    var date = new Date()
    date.setHours(0)    // 时分秒设置从零点开始
    date.setSeconds(0)
    date.setUTCMinutes(0)
    var arr = [], timeArr = [];
    var slotNum = 24*60/step   // 算出多少个间隔
    for (var f = 0; f < slotNum; f++) {   //  stepM * f = 24H*60M
        // arr.push(new Date(Number(date.getTime()) + Number(step*60*1000*f)))   //  标准时间数组
        var time = new Date(Number(date.getTime()) + Number(step*60*1000*f))  // 获取:零点的时间 + 每次递增的时间
        var hour = '', sec = '';
        time.getHours() < 10 ? hour = '0' + time.getHours() : hour = time.getHours()  // 获取小时
        time.getMinutes() < 10 ? sec = '0' + time.getMinutes() : sec = time.getMinutes()   // 获取分钟
        timeArr.push(hour + ':' + sec)
    }
    return timeArr
}
/**
  * 开始日期和结束日期差几天
* @param {String} startDate 开始日期
* @param {String} endDdate 结束日期
*/
 const getDateByDays = (startDate, endDdate) => {
	let d1 = Date.parse(new Date(startDate));
	let d2 = Date.parse(new Date(endDdate));
    // 时间戳相减 / 天数
	let day = parseInt((d2 - d1) / (1000 * 60 * 60 * 24));
	return day
}
/**
 * 获取多少天之内的日期
 * @param {*} dateNow  当前日期
 * @param {*} intervalDays  天数,如30天的数据,31天数据
 * @param {*} bolPastTime 是否是倒叙还是正序,true 是从30天前数据向后推
 * @returns 
 */
 function getDateRange(dateNow,intervalDays,bolPastTime){
    let oneDayTime = 24 * 60 * 60 * 1000;
    let list = [];
    let lastDay;
    if(bolPastTime == true){
        lastDay = new Date(dateNow.getTime() - intervalDays * oneDayTime);
        list.push(formateDate(lastDay));
        list.push(formateDate(dateNow));
    }else{
        lastDay = new Date(dateNow.getTime() + intervalDays * oneDayTime);
        list.push(formateDate(dateNow));
        list.push(formateDate(lastDay));
    }
    return list;
 }

 function formateDate(time){
   
    let year = time.getFullYear()
    let month = time.getMonth() + 1
    let day = time.getDate()

    if (month < 10) {
      month = '0' + month
    }

    if (day < 10) {
      day = '0' + day
    }
    return year + '-' + month + '-' + day + ''
 }
      /**
 * 获取日期之间所有日期
 * @param {*} start 
 * @param {*} end 
 * @returns 
 */
function getAllDate(start, end){
    let dateArr = []
    let startArr = start.split('-')
    let endArr = end.split('-')
    let db = new Date()
    db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2])
    let de = new Date()
    de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2])
    let unixDb = db.getTime()
    let unixDe = de.getTime()
    let stamp
    const oneDay = 24 * 60 * 60 * 1000;
    for (stamp = unixDb; stamp <= unixDe;) {
      dateArr.push(formateDate(new Date(parseInt(stamp))))
      stamp = stamp + oneDay
    }
    return dateArr
}

    //测试方法
    var TestClick = function(){
        var date1 = $("#Date1").val();    
        var date2 = $("#Date2").val();    
        var differ = $("#differ").val();
        if(date1 == "" || date1==null){
            alert("第一个日期不能为空");    
        }
        else if(date2 == "" || date2==null){
            alert("第二个日期不能为空");    
        }
        else if(differ == "" || differ==null ){
            alert("日期相差数不能为空");    
        }
        var result = getDifferDate(date1,date2,differ);        
         console.log("输出结果:"+ result);
    }
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值