我想在两个日期之间创建六个月的范围。
第一个日期frm
是当前日期。
我希望第二个日期till
是将来六个月的日期(即frm
之后的6个月)。
这两个日期都采用20-DEC-15
格式,其中前两位是日,最后两位是年。
如何根据六个月的差异调整till
日期的任何帮助?
frm = new Date();
till = new Date();
var dd = frm.getDate();
var d = till.getDate();
var month = new Array();
month[0] = "JAN";
month[1] = "FEB";
month[2] = "MAR";
month[3] = "APR";
month[4] = "MAY";
month[5] = "JUNE";
month[6] = "JULY";
month[7] = "AUG";
month[8] = "SEPT";
month[9] = "OCT";
month[10] = "NOV";
month[11] = "DEC";
var mm = month[frm.getMonth()];
var m = month[till.getMonth()-6];
var yyyy = frm.getFullYear();
var yyy = till.getFullYear();
yyyy = yyyy.toString().substr(2,2);
yyy = yyy.toString().substr(2,2);
frm = dd+'-'+mm+'-'+yyyy;
till = d+'-'+m+'-'+yyy;
答案 0 :(得分:3)
它的日期算术。添加六个月,检查年份滚动,并确认您的日期落在实际存在的那一天。在这种情况下,我已经完整地保留了您的月份数组。如果您从例如31个月到没有月份的月份滚动,它将使用它所登陆的月份的最后一天(因此12月31日+ 6个月= 5月30日)。 这会回答你的问题吗?
var dt = new Date("Dec 31, 2015"); //Using arg to show date roll. Remove this arg for current client date.
var month = new Array();
month[0] = "JAN";
month[1] = "FEB";
month[2] = "MAR";
month[3] = "APR";
month[4] = "MAY";
month[5] = "JUNE";
month[6] = "JULY";
month[7] = "AUG";
month[8] = "SEPT";
month[9] = "OCT";
month[10] = "NOV";
month[11] = "DEC";
var tmonth = dt.getMonth() + 6 <= 11 ? dt.getMonth() + 6 : dt.getMonth() - 6;
var tyear = dt.getMonth() + 6 <= 11 ? dt.getFullYear() : dt.getFullYear() + 1;
var eom = new Date(tyear, tmonth + 1, 0).getDate(); //get last day of the month
var tday = dt.getDate() > eom ? eom : dt.getDate(); //check if the from day of month > last day of month, use ldom instead if so.
var frm = dt.getDate() + '-' + month[dt.getMonth()] + '-' + dt.getFullYear().toString().substr(2, 2);
var till = tday + '-' + month[tmonth] + '-' + tyear.toString().substr(2, 2);
console.log(frm);
console.log(till);
document.getElementById('frmDate').innerText = frm;
document.getElementById('tillDate').innerText = till;
&#13;
From: <span id="frmDate"></span><br />
To: <span id="tillDate"></span><br />
&#13;
答案 1 :(得分:1)
使用Javascript日期可能很痛苦。您是否考虑使用moment.js等库?
随着时间的推移,你可以做类似的事情:
var frm = moment('2014-12-31'); // Dec 31, 2014
var till = moment(frm).add(6, 'month'); // Jun 30, 2015
var jsDate = till.toDate(); // native js date
这样您就不必编写自己的日期库。请注意,由于6月只有30天,所以在6月份的最后一个日期,即12月的最后一天增加6个月。
答案 2 :(得分:0)
我决定为你构建一个非常简单的解析器。
这是做什么的?
10-DEC-15
。然后我们将此值传递给解析器,解析器的目标是提取月份并为其添加6个月。-
来形成字符串。其次,我们将这个字符串包装在Date对象中,然后瞧!有任何问题吗?请在下面的评论中提问。
var date_1 = new Date("10-DEC-15"),
date_2 = addMonths(date_1, 6);
alert(date_2);
function addMonths(date, addedMonths){
var year = date.getYear(),
month = date.getMonth(),
day = date.getDay(),
monthsOfTheYear = ["JAN", "FEB", "MAR", "APR", "MAY", "JUNE", "JULY", "AUG", "SEPT", "OCT", "NOV", "DEC"];
// Determine the month in numeric form
if(month === monthsOfTheYear[1]){
month = 1;
}
else if(month === monthsOfTheYear[2]){
month = 2;
}
else if(month === monthsOfTheYear[3]){
month = 3;
}
else if(month === monthsOfTheYear[4]){
month = 4;
}
else if(month === monthsOfTheYear[5]){
month = 5;
}
else if(month === monthsOfTheYear[6]){
month = 6;
}
else if(month === monthsOfTheYear[7]){
month = 7;
}
else if(month === monthsOfTheYear[8]){
month = 8;
}
else if(month === monthsOfTheYear[9]){
month = 9;
}
else if(month === monthsOfTheYear[10]){
month = 10;
}
else if(month === monthsOfTheYear[11]){
month = 11;
}
else {
month = 12;
}
// Add the desired months to the current month
month = month + addedMonths;
// Identify if this carries over to a new year
if(month > 12){
month -= 12;
year = parseInt(year) + 1;
}
return [day, month, year].join('-');
}
&#13;
答案 3 :(得分:0)
尝试一下:
(240000,)
(240000,)
(240000,)
享受:)