关于前段时间工作要求在前端页面根据金额、时间、还款模式编写自动生成还款明细列表,找了很多关于时间计算和格式转换的答案,最后自己编写了一个方法先用着。
用前端时间控件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) |
设置当前日期秒为1 | now.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-dd | function 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 quarterEndMonth = quarterStartMonth + 2; |
取与今天偏差为o天的日期 | new Date(now.getTime()+o*24*60*60*1000) |