0

我想创建两个日期,其中包含一个月的开始日期和下个月的开始日期。这就是我所拥有的:

var TheMonth = "6.2012"; // as in june 2012
TheMonth = TheMonth.split(".")

var TheDisplayDate = new Date(parseInt(TheMonth[1], 10), (parseInt(TheMonth[0], 10) - 1), 1);

var TheUpperLimit = new Date(TheDisplayDate.getFullYear(), TheDisplayDate.getMonth(), 1);

//I'm adding a month here but it's not changing the month
TheUpperLimit.setMonth(TheUpperLimit.getUTCMonth() + 1);

问题是 TheUpperLimit 原来是同一日期。我这里有一个小提琴要看。我究竟做错了什么?

谢谢。

4

2 回答 2

1

问题是您使用getUTCMonthwithsetMonth而不是setUTCMonth. 仅一起使用 UTC 或仅使用非 UTC 方法更正确。当您使用setMonthandgetMonth时,它似乎工作正常。但是,当您使用这些函数的 UTC 变体时,它会给您 2 jul 而不是 1 jul(至少在我的时区)。我建议您使用以下代码来避免时间复杂化:

var TheMonth = "6.2012"; // as in june 2012
TheMonth = TheMonth.split(".");
var month = parseInt(TheMonth[0]);
var year = parseInt(TheMonth[1]);
var second_month = month + 1;
var second_year = year;
if (second_month > 12) {
    second_month = 1;
    second_year++;
}

var TheDisplayDate = new Date(year, month - 1, 1);
var TheUpperLimit = new Date(second_year, second_month - 1, 1);
console.log([TheDisplayDate, TheUpperLimit]);
// => [Date {Fri Jun 01 2012 00:00:00 GMT+0400 (MSK)}, 
//     Date {Sun Jul 01 2012 00:00:00 GMT+0400 (MSK)}]
于 2012-06-13T17:49:22.633 回答
1

根据您的 nick( @frenchie),您的当地时间可能是法国时间。这意味着GMT + 2:00

例如,当您设置时:

new Date(2012,5,1)

这意味着你有:

year=2012, month=June, day=1, hours=minutes=seconds=mseconds=0 

因为GMT + 2:00,UTC Date会有-2小时偏移。如果你愿意TheUpperLimit.toString(),你会看到,你有Thu, 31 May 2012 22:00:00 GMT。这意味着,你UTC Month是'4'。因此,当您添加“+1”时,您的月份将有“5”,并且是六月。所以没有什么奇怪的。

于 2012-06-13T18:06:15.980 回答