2017-03-27 3 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

インデックスは0から始まるので、あなたはvar month = date.getMonth();to var month = date.getMonth()+1;を変更する必要があります。

var additionalMonth = date.getMonth(); 

1月のためにそれは0ですのでJSは、0から数えて数ヶ月返し

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

1 F:

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つの異なるアプローチを持っていますまたは2月など、適切な番号が必要な場合はmonthの場合と同様に1を追加する必要があります。これを確認するには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>

関連する問題