最近被日期弄得很头疼,由于js的月份是比较特殊的[0-11],所以在月份计算上诸多不易。特地整理了日期一些方法。
首先,以下代码均有一个共同的日期格式化函数
//日期格式化
Date.prototype.format = function(format) {
var o = {
"M+" : this.getMonth() + 1, // month
"d+" : this.getDate(), // day
"h+" : this.getHours(), // hour
"m+" : this.getMinutes(), // minute
"s+" : this.getSeconds(), // second
"q+" : Math.floor((this.getMonth() + 3) / 3), // quarter
"S" : this.getMilliseconds()
// millisecond
}
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for ( var k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
return format;
}
1.求自然月
我在网上查询到查询三个月前的方法,参照点击打开链接http://wawa129.iteye.com/blog/1766263,进行改造,js代码如下。
//求自然月日期
function getMonthBefore(timeType, num) {
var date = new Date();
var retureValue = "";
if (timeType == 1) {
date.setMonth(date.getMonth() - (num - 1));
//format为日期格式化函数,在下方展示
retureValue = date.format('yyyy-MM');
}
if (timeType == 0) {
date.setMonth(date.getMonth() - (num - 1));
retureValue = date.format('yyyy-MM-01');
}
return retureValue;
}
//求自然月日期
function getMonthBefore(timeType, num) {
var date = new Date();
var retureValue = "";
//如果输入1至输出到月
if (timeType == 1) {
date.setMonth(date.getMonth() - (num ),1);
retureValue = date.format('yyyy-MM');
}
if (timeType == 0) {
date.setMonth(date.getMonth() - (num ),1);
retureValue = date.format('yyyy-MM-01');
}
// alert(retureValue);
return retureValue;
}
//求自然月日期,添加日期格式化符号
function getMonthBeforeFormat(timeType, num,format) {
var date = new Date();
var retureValue = "";
if (timeType == 1) {
date.setMonth(date.getMonth() - (num ),1);
retureValue = date.format('yyyy'+format+'MM');
}
if (timeType == 0) {
date.setMonth(date.getMonth() - (num ),1);
retureValue = date.format('yyyy'+format+'MM'+format+'01');
}
return retureValue;
}
//求自然月日期,添加日期格式化符号,指定某一天
function getMonthBeforeFormatAndDay(timeType, num,format,day) {
var date = new Date();
var retureValue = "";
if (timeType == 1) {
date.setMonth(date.getMonth() - (num ),1);
retureValue = date.format('yyyy'+format+'MM');
}
if (timeType == 0) {
date.setMonth(date.getMonth() - (num ),1);
//读取日期自动会减一,所以要加一
var mo=date.getMonth()+1;
//判断如果傻叉的非得传某一天大于月份最大日期就自动赋值最后一天
if(mo==4||mo==6||mo==9||mo==11){
if(day>30){
day=30
}
}else if(mo==2){
if( isLeapYear(date.getFullYear())){
if(day>29){
day=29
}else{
day=28
}
}
}else{
if(day>31){
day=31
}
}
retureValue = date.format('yyyy'+format+'MM'+format+day);
}
return retureValue;
}
有两种方法
//获取当月最后一天日期
function getLastDay(year,month) {
var new_year = year; //取当前的年份
var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
if(month>12) {
new_month -=12; //月份减
new_year++; //年份增
}
var new_date = new Date(new_year,new_month,1); //取当年当月中的第一天
return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期
}
/**求月末 yyyy-mm-dd
*
* @param _month
* @returns
*/
function getMonthEndDay(_month) {
var date = new Date();
var day=01;
var year1 = _month.substr(0,4);
var month1 = _month.substr(5,2);
date.setYear(year1);
date.setMonth(month1-1);
//读取日期自动回减一
var mo=date.getMonth()+1;
if(mo==4||mo==6||mo==9||mo==11){
day=30
}else if(mo==2){
if( isLeapYear(date.getFullYear())){
day=29
}else{
day=28
}
}else{
day=31
}
date.setDate(parseInt(day));
return date.format('yyyy-MM-dd');
}
3.获取前后天数
function GetDateStr(AddDayCount) {
var dd = new Date();
dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期
var y = dd.getFullYear();
var m = dd.getMonth()+1;//获取当前月份的日期
var d = dd.getDate();
return dd.format('yyyy-MM-dd');
}
//获取当前日期YYYY MM DD
function getNowDate(format) {
var now = new Date()
y = now.getFullYear()
m = now.getMonth() + 1
d = now.getDate()
m = m < 10 ? "0" + m : m
d = d < 10 ? "0" + d : d
return y + format + m + format + d
}
5.判断是否为闰年
//JS判断闰年代码
function isLeapYear (Year) {
if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
return (true);
} else { return (false); }
}