Javascript - 获取上个月的日期

问题描述 投票:0回答:9

如果我有一个返回日期的变量,格式为 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?

javascript jquery angularjs angularjs-scope
9个回答
19
投票
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:

如果您不想处理极端情况,只需使用 moment.js。用于日期的原生 JavaScript API 很糟糕。


10
投票

只需从月份参数中减去月份数,不用担心该值是否为负数。将会正确处理。

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

5
投票

对于所有与日期相关的活动,我建议使用 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');

now 将等于 01/12/2013。


2
投票

您可以使用 moment.js 减法函数 为此。

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

1
投票

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

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

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

console.log('After subtracting half year: ', makeDate.toString());


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

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

0
投票
var makeDate = new Date();

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

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

console.log('After subtracting half year: ', makeDate.toString());

0
投票

有人可以向我解释一下这种行为吗?以及如何修复它

今天是 5 月 31 日

const currentDate = new Date();
const currentMonth = currentDate
  .toLocaleString("default", { month: "short" })
  .toUpperCase();

//  previous
const previousDate = new Date();
previousDate.setMonth(currentDate.getMonth() - 1);
const previousMonth = previousDate
  .toLocaleString("default", { month: "short" })
  .toUpperCase();
© www.soinside.com 2019 - 2024. All rights reserved.