js工具:时间格式化 开始月取第一天 00:00:00 和结束月最后一天 23:59:59

259 阅读1分钟
/**

 * 时间范围格式化 取第一天 00:00:00 和最后一天 23:59:59

 * @param l 时间范围 []

 * @param fmtStr String 时间格式 yyyy-MM-dd hh:mm:ss

 * @param isStamp Boolean 是否需要时间戳

 * @return Array ['2022-11-01 00:00:00', '2022-11-30 23:59:59'] / [1667232000000, 1669823999000]

 */



function fmtDateStarAndEnd (l, fmtStr, isStamp = false) {

  let fmt = 'yyyy-MM-dd hh:mm:ss';

  if (fmtStr) {

    fmt = fmtStr;

  }

  let firstDate = null

  let endDate = null

  if (l&&l.length) {

    firstDate = new Date(l[0])

    endDate = new Date(l[1] || l[0])

  } else {

    firstDate = new Date()

    endDate = new Date(firstDate)

  }

  firstDate.setDate(1); //开始月份第一天

  endDate.setMonth(endDate.getMonth() + 1);

  endDate.setDate(0); // 结束月份最后一天

  let start = new Date(fmtDateTime('yyyy/MM/dd', firstDate) + ' ' + '00:00:00')

  let end = new Date(fmtDateTime('yyyy/MM/dd', endDate) + ' ' + '23:59:59')

  if (isStamp) {

    return [start.getTime(), end.getTime()]

  } else {

    return [fmtDateTime(fmt, start), fmtDateTime(fmt, end)]

  }

};



/**

 * 时间戳转换为时间

 * @param fmt yyyy-MM-dd hh:mm:ss

 * @param date 时间对象

 * @returns {*}

 */

function fmtDateTime(fmt, date) {

  var o = {

    "M+": date.getMonth() + 1,                 //月份

    "d+": date.getDate(),                    //日

    "h+": date.getHours(),                   //小时

    "m+": date.getMinutes(),                 //分

    "s+": date.getSeconds(),                 //秒

    "q+": Math.floor((date.getMonth() + 3) / 3), //季度

    "S": date.getMilliseconds()             //毫秒

  };

  if (/(y+)/.test(fmt))

    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));

  for (var k in o)

    if (new RegExp("(" + k + ")").test(fmt))

      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

  return fmt;

}