2017-03-27 42 views
2

第一次约会应该是28/03/2017,但它的返回值为28/02/2017如何返回正确的月份?

第一次约会后的几个月似乎是正确的。

有没有更好的方法做到这一点,或者有人可以帮我弄清楚为什么第一次约会是这样的?

var date = new Date("Tue Mar 28 2017 13:14:00 GMT+0100 (BST)"); 
 
var additionalMonth = date.getMonth(); 
 

 
function addZero(i) { 
 
    if (i < 10) { 
 
     i = "0" + i; 
 
    } 
 
    return i; 
 
} 
 

 
function formatDateToString(d){ 
 
    var month = '' + (d.getMonth() + 1); 
 
    var day = '' + d.getDate(); 
 
    var year = d.getFullYear(); 
 
    var hour = d.getHours(); 
 
    var minute = d.getMinutes(); 
 
    var second = d.getSeconds(); 
 

 
    if (month.length < 2) month = '0' + month; 
 
    if (day.length < 2) day = '0' + day; 
 
    hour = addZero(hour); 
 
    minute = addZero(minute); 
 
\t second = addZero(second); 
 
\t 
 
\t var date = [day, month, year].join('/'); 
 
\t var time = [hour, minute, second].join(':'); 
 
\t 
 
\t var newDate = date + " " + time; 
 
\t return newDate; 
 
} 
 

 
function setTimeForDate(date){ 
 
\t date.setHours(12); 
 
\t date.setMinutes(0); 
 
\t date.setSeconds(0); 
 
\t return date; 
 
} 
 

 
function calculateDate(date, month){ 
 
\t date.setMonth(month); 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function calculateLastDayMonth(date, day){ 
 
\t var month = date.getMonth(); 
 
\t var year = date.getFullYear(); 
 
\t var d = new Date(year, month, 0).getDate(); 
 
\t if(day >= d){ 
 
\t \t date = new Date(year, month, 0); 
 
\t } 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function returnFormattedDate(startDate, additionalMonth){ 
 
\t var day = startDate.getDate(); 
 
\t var newDate = calculateDate(startDate, additionalMonth); 
 
\t var correctDate = calculateLastDayMonth(newDate, day); 
 
\t return formatDateToString(correctDate); 
 
} 
 

 
$(".returnedDate").text("START DATE: " + returnFormattedDate(date, additionalMonth)); 
 

 
for(var x = 0; x <= 5; x++){ 
 
    $("body").append(returnFormattedDate(date, additionalMonth) + "<br>"); 
 
    additionalMonth++; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<h5 class="returnedDate"></h5>

+1

我的第一个建议是使用momentjs,这使得处理日期更加容易。 –

回答

2

你必须改变var month = date.getMonth();to var month = date.getMonth()+1;因为指数从0开始。

var date = new Date("Tue Mar 28 2017 13:14:00 GMT+0100 (BST)"); 
 
var additionalMonth = date.getMonth(); 
 

 
function addZero(i) { 
 
    if (i < 10) { 
 
     i = "0" + i; 
 
    } 
 
    return i; 
 
} 
 

 
function formatDateToString(d){ 
 
    var month = '' + (d.getMonth() + 1); 
 
    var day = '' + d.getDate(); 
 
    var year = d.getFullYear(); 
 
    var hour = d.getHours(); 
 
    var minute = d.getMinutes(); 
 
    var second = d.getSeconds(); 
 

 
    if (month.length < 2) month = '0' + month; 
 
    if (day.length < 2) day = '0' + day; 
 
    hour = addZero(hour); 
 
    minute = addZero(minute); 
 
\t second = addZero(second); 
 
\t 
 
\t var date = [day, month, year].join('/'); 
 
\t var time = [hour, minute, second].join(':'); 
 
\t 
 
\t var newDate = date + " " + time; 
 
\t return newDate; 
 
} 
 

 
function setTimeForDate(date){ 
 
\t date.setHours(12); 
 
\t date.setMinutes(0); 
 
\t date.setSeconds(0); 
 
\t return date; 
 
} 
 

 
function calculateDate(date, month){ 
 
\t date.setMonth(month); 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function calculateLastDayMonth(date, day){ 
 
\t var month = date.getMonth()+1; 
 
\t var year = date.getFullYear(); 
 
\t var d = new Date(year, month, 0).getDate(); 
 
\t if(day >= d){ 
 
\t \t date = new Date(year, month, 0); 
 
\t } 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function returnFormattedDate(startDate, additionalMonth){ 
 
\t var day = startDate.getDate(); 
 
\t var newDate = calculateDate(startDate, additionalMonth); 
 
\t var correctDate = calculateLastDayMonth(newDate, day); 
 
\t return formatDateToString(correctDate); 
 
} 
 

 
$(".returnedDate").text("START DATE: " + returnFormattedDate(date, additionalMonth)); 
 

 
for(var x = 0; x <= 5; x++){ 
 
    $("body").append(returnFormattedDate(date, additionalMonth) + "<br>"); 
 
    additionalMonth++; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<h5 class="returnedDate"></h5>

1

你有2种不同的方法:

var additionalMonth = date.getMonth(); 

var month = '' + (d.getMonth() + 1); 

JS返回个月0计数,所以一月份它的01˚F或二月等,所以如果你想要正确的号码,你需要添加1,就像你为month做的那样。你也可以查看here

1
var month = date.getMonth() + 1; 


因为一个月的索引从0开始你应该加1月份;

0

请更改calculateLastDayMonth()函数中的行。 var month = date.getMonth()+ 1;即你需要添加+1它工作正常

请在以下提到的更新代码:

var date = new Date("Tue Mar 28 2017 13:14:00 GMT+0100 (BST)"); 
 
var additionalMonth = date.getMonth(); 
 

 
function addZero(i) { 
 
    if (i < 10) { 
 
     i = "0" + i; 
 
    } 
 
    return i; 
 
} 
 

 
function formatDateToString(d){ 
 
    var month = '' + (d.getMonth() + 1); 
 
    var day = '' + d.getDate(); 
 
    var year = d.getFullYear(); 
 
    var hour = d.getHours(); 
 
    var minute = d.getMinutes(); 
 
    var second = d.getSeconds(); 
 

 
    if (month.length < 2) month = '0' + month; 
 
    if (day.length < 2) day = '0' + day; 
 
    hour = addZero(hour); 
 
    minute = addZero(minute); 
 
\t second = addZero(second); 
 
\t 
 
\t var date = [day, month, year].join('/'); 
 
\t var time = [hour, minute, second].join(':'); 
 
\t 
 
\t var newDate = date + " " + time; 
 
\t return newDate; 
 
} 
 

 
function setTimeForDate(date){ 
 
\t date.setHours(12); 
 
\t date.setMinutes(0); 
 
\t date.setSeconds(0); 
 
\t return date; 
 
} 
 

 
function calculateDate(date, month){ 
 
\t date.setMonth(month); 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function calculateLastDayMonth(date, day){ 
 
\t var month = date.getMonth()+1; 
 
\t var year = date.getFullYear(); 
 
\t var d = new Date(year, month, 0).getDate(); 
 
\t if(day >= d){ 
 
\t \t date = new Date(year, month, 0); 
 
\t } 
 
\t date = setTimeForDate(date); 
 
\t return date; 
 
} 
 

 
function returnFormattedDate(startDate, additionalMonth){ 
 
\t var day = startDate.getDate(); 
 
\t var newDate = calculateDate(startDate, additionalMonth); 
 
\t var correctDate = calculateLastDayMonth(newDate, day); 
 
\t return formatDateToString(correctDate); 
 
} 
 

 
$(".returnedDate").text("START DATE: " + returnFormattedDate(date, additionalMonth)); 
 

 
for(var x = 0; x <= 5; x++){ 
 
    $("body").append(returnFormattedDate(date, additionalMonth) + "<br>"); 
 
    additionalMonth++; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<h5 class="returnedDate"></h5>

相关问题