Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用正确的格式从所选日期减去1个月_Javascript - Fatal编程技术网

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

Javascript 如何使用正确的格式从所选日期减去1个月,javascript,Javascript,我想从所选日期中减去1个月,并以以下格式获取它mm/dd/yyyy self.SelectedDate = "02/22/2018"; var temp = new Date(self.SelectedDate); temp.setDate(temp.getDate() - 30); 但我得到的结果是2018年1月8日周一00:00:00 GMT+0800(马来半岛标准时间) 这只是我程序中的一小部分,所以我不想为此下载库。我正在使用AngularJS,有没有一种方法可以在不下载或添加

我想从所选日期中减去1个月,并以以下格式获取它
mm/dd/yyyy

self.SelectedDate = "02/22/2018";
var temp = new Date(self.SelectedDate);
    temp.setDate(temp.getDate() - 30);
但我得到的结果是2018年1月8日周一00:00:00 GMT+0800(马来半岛标准时间)

这只是我程序中的一小部分,所以我不想为此下载库。我正在使用AngularJS,有没有一种方法可以在不下载或添加角度过滤器的情况下获得我想要的内容?

不接受这种格式的字符串

self.SelectedDate=“2018年2月22日”;
var p=自选择日期分割(“/”);
var temp=新日期(p[2],p[0]-1,p[1]);
临时设置日期(临时设置日期()-30);
常数pad=n=>(“0”+n).slice(-2);
var f=[pad(temp.getMonth()+1)、pad(temp.getDate())、temp.getFullYear()].join(“/”);

控制台日志(f)将时间存储在
temp
变量中。 所以,你可以这样做,以你的格式

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

根据一些评论和回答。我写了一个函数,你可以调用它来格式化日期

它接受JS日期作为唯一的参数

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}`
}
var formatDate=(日期)=>{
var month=date.getMonth()+1
var day=date.getDate()
var year=date.getFullYear()
//如果不是两位数,则用“0”填充月份和/或日期
如果(月<10)月=`0${month}`
如果(天<10)天=`0${day}`
返回`${month}/${day}/${year}`
}

日期接受的构造函数:

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) );

因为现在有了日期对象,所以可以使用momentjs之类的库将其格式化为字符串。另一个选择是,您可以手动格式化ITA,因为库似乎不受欢迎,日期可以是真正的PITA。按照上面的建议做。使用图书馆。。moment.js非常好。。。如果您需要多个时区,请查看以下时刻时区库:well@ArunPJohny我正在使用AngularJS,但我不想使用任何过滤器。手动格式化的方法是什么?为什么不使用过滤器?但如果您不能也不想使用任何其他库,则可以使用自定义函数,如
函数formatDate(date){var dt=date.getDate(),mon=date.getMonth()+1,yy=date.getFullYear();let value=(mon<9?'0':'0')+mon;value+='/'+(dt<9?'0':'')+dt;value+='/'+yy;return value;}
我得到的结果是
1/23/118
,如何得到
1/23/2018
?@klent-我更新了它,改为使用
getFullYear
,这是怎么回事?
新日期(p[2],p[0]-1,p[1])
你能解释一下这部分代码吗?我还想知道如何添加月份。谢谢你的帮助。。。我写的格式化日期的任何格式,你需要的。它比添加整个库更易于管理,但它主要只是用于参考。整洁,+1,如果小于10,可能也要填充日期。这也有效!我只需要把它添加到我当前的代码中。谢谢