如何返回正确的月份?
问题描述:
第一次约会应该是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>
答
你必须改变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>
答
你有2种不同的方法:
var additionalMonth = date.getMonth();
和
var month = '' + (d.getMonth() + 1);
JS返回个月0
计数,所以一月份它的0
,1
˚F或二月等,所以如果你想要正确的号码,你需要添加1
,就像你为month
做的那样。你也可以查看here。
答
var month = date.getMonth() + 1;
因为一个月的索引从0开始你应该加1月份;
答
请更改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>
我的第一个建议是使用momentjs,这使得处理日期更加容易。 –