如何返回正确的月份?

时间:2017-03-27 12:30:19

标签: javascript html datetime

第一个日期应该是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);
	second = addZero(second);
	
	var date = [day, month, year].join('/');
	var time = [hour, minute, second].join(':');
	
	var newDate = date + " " + time;
	return newDate;
}

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:2)

您必须更改var month = date.getMonth(); to var month = date.getMonth()+1;,因为索引从0开始。

&#13;
&#13;
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);
	second = addZero(second);
	
	var date = [day, month, year].join('/');
	var time = [hour, minute, second].join(':');
	
	var newDate = date + " " + time;
	return newDate;
}

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

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

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

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

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

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

答案 1 :(得分:1)

您有两种不同的方法:

var additionalMonth = date.getMonth();

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

JS从0开始计算月数,对于1月份的0,{2}的1等等,所以如果您需要正确的数字,则需要添加{ {1}},与1一样。您也可以查看here

答案 2 :(得分:1)

var month = date.getMonth() + 1;


您应该在月份中添加1,因为月份索引从0开始;

答案 3 :(得分: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);
	second = addZero(second);
	
	var date = [day, month, year].join('/');
	var time = [hour, minute, second].join(':');
	
	var newDate = date + " " + time;
	return newDate;
}

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

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

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

function returnFormattedDate(startDate, additionalMonth){
	var day = startDate.getDate();
	var newDate = calculateDate(startDate, additionalMonth);
	var correctDate = calculateLastDayMonth(newDate, day);
	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>