0

月の開始日と翌月の開始日を含む2つの日付を作成したいと思います。これは私が持っているものです:

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

あなたのニックネーム(@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」になり、6月になります。したがって、奇妙なことは何もありません。

于 2012-06-13T18:06:15.980 に答える
1

問題は、の代わりにを使用getUTCMonthすることです。UTCのみまたはUTC以外のメソッドのみを一緒に使用する方が正しいです。とを使用すると、正しく動作するようです。しかし、これらの関数のUTCバリエーションを使用すると、1ジュルではなく2ジュルになります(少なくとも私のタイムゾーンでは)。時間の問題を避けるために、次のコードを使用することをお勧めします。setMonthsetUTCMonthsetMonthgetMonth

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 に答える