簡體   English   中英

javascript日期操縱怪異

[英]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原來是同一個日期。 我在這里看一下小提琴。 我究竟做錯了什么?

謝謝。

問題是你使用getUTCMonthsetMonth而不是setUTCMonth 僅使用UTC或僅使用非UTC方法更為正確。 當你使用setMonthgetMonth ,它似乎工作正常。 但是當你使用這些函數的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:00UTC 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM