js日期函数大全

it2025-10-09  13

// 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.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; } /** * 格式化日期 为 yyyy-MM-dd * @param date * @returns {string} */ function dateFormat(date) { if (!date || typeof (date) === "string") { this.error("参数异常,请检查..."); } var y = date.getFullYear(); //年 var m = date.getMonth() + 1; //月 var d = date.getDate(); //日 return y + "-" + m + "-" + d; } /** * 格式化月和日为MM、dd * @param value * @returns {string} */ function formatDate(value) { if (value < 10) { value = "0" + value; } return value; } /** * 获取指定日期的当周第一天 * @param dd * @returns {string} */ function getFirstDayOfWeek(dd) { var week = dd.getDay(); //获取时间的星期数 var minus = week ? week - 1 : 6; dd.setDate(dd.getDate() - minus); //获取minus天前的日期 var y = dd.getFullYear(); var m = dd.getMonth() + 1; //获取月份 var d = dd.getDate(); return y + "-" + formatDate(m) + "-" + formatDate(d); } /** * 获取当周 第一天 和 最后 一天 * @returns {{firstDate: string, lastDate: string}} */ function getStartAndEndOfCurrWeek() { var d = new Date(); var year = d.getFullYear(); var month = parseInt(d.getMonth()) + 1; //获取周一 var beginWhereTheTime = getFirstDayOfWeek(d); var dd = new Date(beginWhereTheTime); //获取周天 dd.setDate(dd.getDate() + 6); var monthSunday = parseInt(dd.getMonth()) + 1; var endWhereTheTime = dd.getFullYear() + "-" + formatDate(monthSunday) + "-" + formatDate(dd.getDate()); return { "firstDate": beginWhereTheTime, "lastDate": endWhereTheTime } } /** * 获取开始日期与结束日期之间的所有日期数组 * @param begin * @param end * @returns {[]} */ function getAllDates(begin, end) { //返回 日期的数组 如 ['2020-07-10','2020-07-11'] var arr = []; var ab = begin.split("-"); var ae = end.split("-"); var db = new Date(); db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]); var de = new Date(); de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]); var unixDb = db.getTime() - 24 * 60 * 60 * 1000; var unixDe = de.getTime() - 24 * 60 * 60 * 1000; for (var k = unixDb; k <= unixDe;) { //console.log((new Date(parseInt(k))).format()); k = k + 24 * 60 * 60 * 1000; arr.push((new Date(parseInt(k))).Format('yyyy-MM-dd')); } return arr; } /** * 获取当月第一天 * @param dd * @returns {string} */ function getFirstDayOfCurrentMonth() { var now = new Date(); now.setDate(1); var startDateStr = now.Format("yyyy-MM-dd"); return startDateStr; } /** * 获取指定日期当月第一天 * @param date * @returns {*} */ function getFirstDayOfMonth(date) { date.setDate(1); return dateFormat(date); } /** * 获取指定日期当年第一天 * @param date * @returns {*} */ function getFirstDayOfYear (date) { date.setDate(1); date.setMonth(0); return dateFormat(date); } /** * 获取指定日期当季第一天 * @param date * @returns {返回值为格式化的日期,yy-mm-dd} */ function getFirstDayOfSeason (date) { var month = date.getMonth(); if(month <3 ){ date.setMonth(0); }else if(2 < month && month < 6){ date.setMonth(3); }else if(5 < month && month < 9){ date.setMonth(6); }else if(8 < month && month < 11){ date.setMonth(9); } date.setDate(1); return dateFormat(date); } /** * 根据 年份 和 季度 获取 季度 第一天 和 季度 最后 一天 * @param year * @param quarter * @returns {{endDate: string, startDate: string}} */ function getStartEndOfQuarter(year,quarter) { let startMonth = 1; if(quarter == 1){ startMonth = 1; }else if (quarter == 2){ startMonth = 4; }else if (quarter == 3){ startMonth = 7; }else if (quarter == 4){ startMonth = 10; } let endMonth = startMonth + 2; if (quarter == 0){ endMonth = 12 } const startDate = year+"-"+formatDate(startMonth)+'-01'; const endDate = year + '-' + formatDate(endMonth) + '-' +new Date(year,endMonth,0).getDate() console.log(startDate,endDate) return {startDate,endDate} } // 获取上一个月时间,返回yyyy-MM-dd字符串 function getLastMonthTime(date){ // 1 2 3 4 5 6 7 8 9 10 11 12月 var daysInMonth = [0,31,28,31,30,31,30,31,31,30,31,30,31]; var strYear = date.getFullYear(); var strDay = date.getDate(); var strMonth = date.getMonth()+1; //一、解决闰年平年的二月份天数 //平年28天、闰年29天//能被4整除且不能被100整除的为闰年,或能被100整除且能被400整除 if (((strYear % 4) === 0) && ((strYear % 100)!==0) || ((strYear % 400)===0)){ daysInMonth[2] = 29; } if(strMonth - 1 === 0) //二、解决跨年问题 { strYear -= 1; strMonth = 12; } else { strMonth -= 1; } // strDay = daysInMonth[strMonth] >= strDay ? strDay : daysInMonth[strMonth]; strDay = Math.min(strDay,daysInMonth[strMonth]);//三、前一个月日期不一定和今天同一号,例如3.31的前一个月日期是2.28;9.30前一个月日期是8.30 if(strMonth<10)//给个位数的月、日补零 { strMonth="0"+strMonth; } if(strDay<10) { strDay="0"+strDay; } var datastr = strYear+"-"+strMonth+"-"+strDay; return datastr; } * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date.split('-'); var year = arr[0]; //获取当前日期的年份 var month = arr[1]; //获取当前日期的月份 var day = arr[2]; //获取当前日期的日 var days = new Date(year, month, 0); days = days.getDate(); //获取当前日期中月的天数 var year2 = year; var month2 = parseInt(month) - 1; if (month2 == 0) { year2 = parseInt(year2) - 1; month2 = 12; } var day2 = day; var days2 = new Date(year2, month2, 0); days2 = days2.getDate(); if (day2 > days2) { day2 = days2; } if (month2 < 10) { month2 = '0' + month2; } var t2 = year2 + '-' + month2 + '-' + day2; return t2; } /** * 获取下一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getNextMonth(date) { var arr = date.split('-'); var year = arr[0]; //获取当前日期的年份 var month = arr[1]; //获取当前日期的月份 var day = arr[2]; //获取当前日期的日 var days = new Date(year, month, 0); days = days.getDate(); //获取当前日期中的月的天数 var year2 = year; var month2 = parseInt(month) + 1; if (month2 == 13) { year2 = parseInt(year2) + 1; month2 = 1; } var day2 = day; var days2 = new Date(year2, month2, 0); days2 = days2.getDate(); if (day2 > days2) { day2 = days2; } if (month2 < 10) { month2 = '0' + month2; } var t2 = year2 + '-' + month2 + '-' + day2; return t2; } //测试 //alert(getPreMonth("2014-01-25")); //alert(getNextMonth("2014-12-25"));
最新回复(0)