[英]javascript date manipulation weirdness
我想創建兩個日期,其中包含一個月的開始日期和下個月的開始日期。 這就是我所擁有的:
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原來是同一個日期。 我在這里看一下小提琴。 我究竟做錯了什么?
謝謝。
問題是你使用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)}]
根據您的昵稱( @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',這是六月。所以沒有什么是奇怪的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.