如何使用正确的格式从选定日期减去1个月

时间:2018-02-22 04:01:57

标签: javascript

我想从所选日期减去1个月,并以此格式mm/dd/yyyy

获取
self.SelectedDate = "02/22/2018";
var temp = new Date(self.SelectedDate);
    temp.setDate(temp.getDate() - 30);

但我得到的结果是Mon Jan 08 2018 00:00:00 GMT+0800 (Malay Peninsula Standard Time)

这只是我程序中的一小部分,因此我不想为此下载库。我正在使用AngularJS,有没有办法在不下载或添加角度过滤器的情况下得到我想要的东西?

4 个答案:

答案 0 :(得分:3)

Date constructor不接受此格式的字符串。

self.SelectedDate = "02/22/2018";
var p = self.SelectedDate.split("/");
var temp = new Date(p[2],p[0]-1,p[1]);
    temp.setDate(temp.getDate() - 30);
const pad = n=>("0"+n).slice(-2);
var f = [pad(temp.getMonth()+1),pad(temp.getDate()),temp.getFullYear()].join("/");
console.log(f);

答案 1 :(得分:2)

符合一些评论和答案。我写了一个你可以调用的函数,它会根据你的需要格式化日期。

它接受JS Date作为唯一参数

var formatDate = (date) => {
   var month = date.getMonth() + 1
   var day = date.getDate()
   var year = date.getFullYear()

   //Pad the month and/or day with "0" if its not two digits
   if(month < 10) month = `0${month}`
   if(day < 10) day = `0${day}`

   return `${month}/${day}/${year}`
}

JS Bin example

答案 2 :(得分:1)

您有时间存储在temp变量中。 所以,你可以做这样的事情来获得你的格式。

formattedDate = ("0" + (temp.getMonth() + 1)).slice(-2) + "/" + temp.getDate() + "/" + temp.getFullYear();

答案 3 :(得分:0)

日期的构造函数接受:

new Date(year, month [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

关于你的案子:

new Date( year, month, day )

以下功能解决了您的问题:

function formatDate(date) {
    let parts = date.split('/');
    date = new Date( parts[2], parts[0]-2, parts[1] )
    return addZero( date.getMonth() + 1) +
        addZero( date.getDate()) + date.getFullYear();
}

function addZero(number) {
    return ('0' + number).slice(-2) + '/' ;
}

// test
var dateN = '01/31/2018'
console.log( formatDate(dateN) );