yyyymmdd - javascript get date format




如何在今天之前的三個月內使用JavaScript計算日期? (9)

我正試圖形成一個日期,這是在當前日期前的3個月。 我通過下面的代碼獲取當前月份

var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;

考慮到當月份是1月(1),在日期前3個月將是OCtober(10),你們能否給我提供計算和形成日期( Date數據類型的對象)的邏輯?


一個“單行”(在許多行上以便於閱讀))直接放入一個變量中:

var oneMonthAgo = new Date(
    new Date().getFullYear(),
    new Date().getMonth() - 1, 
    new Date().getDate()
);

在我的情況下,我需要減去1個月到當前日期。 重要的部分是月份號碼,所以它不關心你當前月份的哪一天,我需要上個月。 這是我的代碼:

var dateObj = new Date('2017-03-30 00:00:00'); //Create new date object
console.log(dateObj); // Thu Mar 30 2017 00:00:00 GMT-0300 (ART)

dateObj.setDate(1); //Set first day of the month from current date
dateObj.setDate(-1); // Substract 1 day to the first day of the month

//Now, you are in the last month
console.log(dateObj); // Mon Feb 27 2017 00:00:00 GMT-0300 (ART)

摘要1個月到實際日期這是不准確的,這就是為什麼我第一次設置月份的第一天(任何月份的第一天總是第一天),第二位我減去1天,總是會把你送到上個月。 希望能幫助你。

var dateObj = new Date('2017-03-30 00:00:00'); //Create new date object
console.log(dateObj); // Thu Mar 30 2017 00:00:00 GMT-0300 (ART)

dateObj.setDate(1); //Set first day of the month from current date
dateObj.setDate(-1); // Substract 1 day to the first day of the month

//Now, you are in the last month
console.log(dateObj); // Mon Feb 27 2017 00:00:00 GMT-0300 (ART)


已經有一個優雅的答案,但我發現它很難閱讀,所以我做了我自己的功能。 為了我的目的,我不需要負面的結果,但不難修改。

    var subtractMonths = function (date1,date2) {
        if (date1-date2 <=0) {
            return 0;
        }
        var monthCount = 0;
        while (date1 > date2){
            monthCount++;
            date1.setMonth(date1.getMonth() -1);
        }
        return monthCount;
    }

我喜歡gilly3的答案的簡單性,但用戶可能會感到驚訝的是,在3月31日之前的一個月是3月3日。我選擇實施一個堅持到月底的版本,所以在3月28日,29日,30日, 31日將全部是2月28日,這不是閏年。

function addMonths(date, months) {
  var result = new Date(date),
      expectedMonth = ((date.getMonth() + months) % 12 + 12) % 12;
  result.setMonth(result.getMonth() + months);
  if (result.getMonth() !== expectedMonth) {
    result.setDate(0);
  }
  return result;
}

var dt2004_05_31 = new Date("2004-05-31 0:00"),
    dt2001_05_31 = new Date("2001-05-31 0:00"),
    dt2001_03_31 = new Date("2001-03-31 0:00"),
    dt2001_02_28 = new Date("2001-02-28 0:00"),
    result = addMonths(dt2001_05_31, -2);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2001_05_31, -3);
console.assert(dt2001_02_28.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2001_05_31, 36);
console.assert(dt2004_05_31.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2004_05_31, -38);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());

console.log('Done.');


為了使事情變得非常簡單,你可以使用DateJS,一個JavaScript的日期庫:

http://www.datejs.com/

示例代碼:

Date.today().add({ months: -1 });

這應該處理加/減,只需要將負值減去以及添加正值。 這也解決了月份交叉問題。

function monthAdd(date, month) {
    var temp = date;
    temp = new Date(date.getFullYear(), date.getMonth(), 1);
    temp.setMonth(temp.getMonth() + (month + 1));
    temp.setDate(temp.getDate() - 1); 

    if (date.getDate() < temp.getDate()) { 
        temp.setDate(date.getDate()); 
    }

    return temp;    
}

var d = new Date();
document.write(d + "<br/>");
d.setMonth(d.getMonth() - 6);
document.write(d);


var d = new Date("2013/01/01");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() + 18);
console.log(d.toLocaleDateString());


var d = new Date();
d.setMonth(d.getMonth() - 3);

這適用於一月。 運行這個片段:

var d = new Date("2012/01/14");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());





date