如何在JavaScript中为自定义日期添加月份

时间:2015-12-29 19:55:07

标签: javascript date

我想在两个日期之间创建六个月的范围。

第一个日期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;

4 个答案:

答案 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;
&#13;
&#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)

我决定为你构建一个非常简单的解析器。

这是做什么的?

  1. 我们定义了两个日期,第一个我们基于您自己的示例10-DEC-15。然后我们将此值传递给解析器,解析器的目标是提取月份并为其添加6个月。
  2. 在解析器中,我们提取所有相关信息:年,月和日。
  3. 然后我们继续比较这个月的数字,繁琐的小事情,但它下面的工作方式非常明确(if / else语句)。我确实使用了你的月份数组的想法并以更好的方式使用它,编写的代码更少: - )
  4. 一旦我们知道它在数字上是哪个月,我们会存储该值,然后将其加6,代表六个月。
  5. 如果月份的值大于6,那么我们会做一些数学运算并减去12来得到下一年的月份。示例:9月= 9,9 + 6 = 15,15-12 = 3,即3月。我们还需要在年份中添加1,例如15到16。
  6. 一切都做对了吗?是的,然后我们返回最初提供给我们的字符串。首先,我们使用 join 和分隔符-来形成字符串。其次,我们将这个字符串包装在Date对象中,然后瞧!
  7. 有任何问题吗?请在下面的评论中提问。

    &#13;
    &#13;
    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;
    &#13;
    &#13;

答案 3 :(得分:0)

尝试一下:

(240000,)
(240000,)
(240000,)

享受:)