Javascript - 获取上个月的日期

时间:2014-10-21 13:34:31

标签: javascript jquery angularjs angularjs-scope

如果我有一个返回日期的变量,格式为dd MMM yyyy,那么2014年8月28日,我怎样才能得到上个月的日期。

我可以通过以下方式修改月份:

$scope.DateMapping = function (months) {

    var myVariable = "28 Aug 2014"
    var makeDate = new Date(myVariable);
    prev = new Date(makeDate.getFullYear(), makeDate.getMonth()+1, 1);

});

基本上,这是在本月增加一个..但我怎么能解释多年,所以如果当前日期是2014年12月12日,那么之前的日期是2013年1月12日?

我的应用程序使用AngularJS可以使用过滤器。

更新:

    var myVariable = "28 Aug 2014"
    var makeDate = new Date(myVariable);
    var prev = new Date(makeDate.getFullYear(), makeDate.getMonth()+1, makeDate.getMonth());

    console.log(myVariable)
    console.log(makeDate)
    console.log(prev)

Output:

    28 Aug 2014
    Thu Aug 28 2014 00:00:00 GMT+0100 (GMT Standard Time)
    Mon Sep 01 2014 00:00:00 GMT+0100 (GMT Standard Time)

虽然月份增加了,但是这一天显示为01而不是28?

6 个答案:

答案 0 :(得分:9)

只需从月份参数中减去月数,如果值为负,请不要担心。它将被正确处理。

new Date(2014, 0, 1) // 1st Jan 2014
new Date(2014, -1, 1) // 1st Dec 2013

答案 1 :(得分:6)

var myVariable = "28 Aug 2014"
var makeDate = new Date(myVariable);
makeDate = new Date(makeDate.setMonth(makeDate.getMonth() - 1));

<强>更新

较短的版本:

var myVariable = "28 Aug 2014"
var makeDate = new Date(myVariable);

console.log('Original date: ', makeDate.toString());

makeDate.setMonth(makeDate.getMonth() - 1);

console.log('After subtracting a month: ', makeDate.toString());

答案 2 :(得分:4)

对于所有与日期相关的活动,我建议使用moment.js库,当您使用AngularJS时,有一个库:https://github.com/urish/angular-moment

看看moment.js文档,您会发现它可以更轻松地在JavaScript中操作日期:http://momentjs.com/docs/#/get-set/month/

您将能够轻松解决您所面临的问题,例如:

var now = moment('01/01/2014').subtract(1, 'months').format('DD/MM/YYYY');

现在将等于01/12/2013。

希望这有帮助!

答案 3 :(得分:2)

您可以使用moment.js subtract function

var day = moment("2014-08-28");
day.subtract(1, 'months');

答案 4 :(得分:0)

有办法可以得到以前的几个月。

const formatter = new Intl.DateTimeFormat("default", {
  month: "long"
});
const date = new Date();

let number = 1;
let prevMonth = formatter.format(
  new Date(date.getFullYear(), date.getMonth() - `${number}`)
);

答案 5 :(得分:0)

这将返回所有前几个月以及该月的开始和结束

     var now = new Date();
            var start_month = new Date();
            start_month.setMonth(now.getMonth() - 5);
            for (var d = start_month; d <= now; d.setMonth(d.getMonth() + 1)) {
                var firstDay = new Date(d.getFullYear(), d.getMonth(), 1);
                var x = new Date(firstDay);
                x.setDate(0);
                x.setDate(1);

                var date = new Date(x);
                var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);

                var startDate = `${firstDay.getFullYear()}-${firstDay.getMonth() + 1}-${firstDay.getDate()}`;
                var endDate = `${lastDay.getFullYear()}-${lastDay.getMonth() + 1}-${lastDay.getDate()}`;
                console.log(startDate)
                console.log(endDate)
            }