我想创建两个日期,其中包含一个月的开始日期和下个月的开始日期。这就是我所拥有的:
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原来是同一个日期。我有一个小提琴here来看。 我做错了什么?
感谢。
答案 0 :(得分:1)
问题是您使用getUTCMonth
代替setMonth
代替setUTCMonth
。仅使用UTC或仅使用非UTC方法更为正确。当您使用setMonth
和getMonth
时,它似乎工作正常。但是当你使用这些函数的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)}]
答案 1 :(得分:1)
根据您的昵称(@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”月份,那就是六月。所以没有什么是奇怪的。