关于前段时间工作要求在前端页面根据金额、时间、还款模式编写自动生成还款明细列表,找了很多关于时间计算和格式转换的答案,最后自己编写了一个方法先用着。
用前端时间控件Date生成一个格式为ymd的时间,用getValue()方法获取时间,传入以下方法,返回一个yyyyMMdd的时间格式
//date:标准时间,addmonth:要加上几个月,返回时间格式为:20191101 getMStartDate:function(date,addmonth) { //获取年份 var myyear = date.getFullYear(); //获取月份 var mymonth = date.getMonth(); //获取天数 var myweekday = date.getDate(); //月份是从0开始 var month = mymonth + addmonth; if(month < 9){//月份小于10 month = "0" + (totalmonth+1); }else if(month >10){//月份大于11月 var n = parseInt(month/12) month = (month+1)-12*n; myyear = myyear+n; }else{//大于9月份小于12月份 month = month + 1; } //判断是否二月份 if(myweekday >28){ if("2"==month){ //判断是否闰年 if(myyear%4==0&&myyear%100!=0||myyear%400==0){ myweekday=29; }else{ myweekday=28; } } if("4"==month || "6"==month|| "9"==month || "11"==month){ myweekday=30; } } //月份小于10月要前面补一个0 if (month < 10) { month = "0" + month; } //天数少于10天前面要补一个0 if (myweekday < 10) { myweekday = "0" + myweekday; } //返回八位的日期格式 return (myyear + "" + month + "" + myweekday); },
一:Date对象是什么
Date 对象用于处理日期和时间。
二:Date创建语法
1. 直接获取当前时间为标准时间
var date = new Date()
console.log(date) //Tue Dec 12 2017 23:09:42 GMT+0800 (中国标准时间)
注释:Date 对象会自动把当前日期和时间保存为其初始值。
2. 指定时间转变成标准时间
var date1 = new Date("January 12,2006 22:19:35")
console.log(date1) //Thu Jan 12 2006 22:19:35 GMT+0800 (中国标准时间)
其下面几种格式都可以:
// new Date("month dd,yyyy hh:mm:ss"); // new Date("month dd,yyyy"); // new Date(yyyy,mth,dd,hh,mm,ss); // new Date(yyyy,mth,dd); // new Date(ms);
三:常用的对象方法
date.getFullYear() //2017 从 Date 对象以四位数字返回年份
date.getMonth() //11 从 Date 对象返回月份 (0 ~ 11)
date.getDay() //2 从 Date 对象返回一周中的某一天 (0 ~ 6)
date.getDate() //12 从 Date 对象返回一个月中的某一天 (1 ~ 31)
date.getHours() //23 返回 Date 对象的小时 (0 ~ 23)
date.getMinutes() //30 返回 Date 对象的分钟 (0 ~ 59)
date.getSeconds() //54 返回 Date 对象的秒数 (0 ~ 59)
date.getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)
date.getTime() 返回 1970 年 1 月 1 日至今的毫秒数
四:各案例转换
1. var time = “2017-12-12”转换成毫秒时间戳
new Date( time.replace(/-/g,"/") ).getTime() //1513008000000
2. var time = 1513008000000转换成“2017-12-12”
注意:time不能是string要是number
var date = new Date(time)
var year1 = date2.getFullYear() var month = date2.getMonth() var today = date2.getDate() var Time1 = year1 + "-" + month + "-" + today
赋某日期为日期类型new Date(myYear,myMonth,myDate);//当myDate为0时,返回当前月份的上月末日期
当前日期now
new Date()设置日期分钟为0 now.setMinutes(0)设置当前日期秒为1now.setSeconds(1)当前日期为本周的第几天,星期三返回3
nowDayOfWeek
now.getDay()当前日
nowDay
now.getDate()当前月
nowMonth
now.getMonth();//0为一月,1为2月,...当前年
nowYear
nowYear = now.getYear();
nowYear += nowYear<2000?1900:0;
格式化日期:yyyy-MM-ddfunction formatDate(date,fmt) { var myyear = date.getFullYear(); var mymonth = date.getMonth()+1; var myweekday = date.getDate(); if(mymonth < 10){ mymonth = "0" + mymonth; } if(myweekday < 10){ myweekday = "0" + myweekday; } return (myyear+"-"+mymonth + "-" + myweekday); } 格式化日期:任意格式 function dateFtt(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; } 两个日期间的间隔天数function getMonthDays(myMonth){ //此处计算的是一个月的天数 var monthStartDate = new Date(nowYear, myMonth, 1); var monthEndDate = new Date(nowYear, myMonth + 1, 1); var days = (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24); return days; }本周的开始日期
weekStartDate
new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);本周的结束日期
weekEndDate
new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));本月初
monthStartDate
new Date(nowYear, nowMonth, 1);
now.setDate(1);
本月所属季度
nowQuarter
nowMonth ++;
parseInt(nowMonth/3+(nowMonth%3==0?0:1))
nowMonth ++;
Math.ceil(nowMonth/3)
上月初
lastMonthStart
new Date(nowYear, lastMonth, 1);
lastMonthDate = new Date();
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth()-1)
new Date(myYear,myMonth-1,1)
上月末
lastMonthEnd
new Date(nowYear, lastMonth, getMonthDays(lastMonth));
new Date(myYear,myMonth,0);
本季度开始月份
quarterStartMonth
if(nowMonth<3){ return 0; }else if(2<nowMonth && nowMonth<6){ return 3; }else if(5<nowMonth && nowMonth<9){ return 6; }else{ //if(nowMonth>8){ return 9; }本季度的开始日期
quarterStartDate
new Date(nowYear, quarterStartMonth, 1);本季度的结束日期
quarterEndDate
var quarterEndMonth = quarterStartMonth + 2; var quarterStartDate = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth));
var quarterEndMonth = quarterStartMonth + 2; var quarterStartDate = new Date(nowYear, quarterEndMonth+1, 0);
取与今天偏差为o天的日期new Date(now.getTime()+o*24*60*60*1000)
