如果我有一个返回日期的变量,格式为 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?
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());
如果您不想处理极端情况,只需使用 moment.js。用于日期的原生 JavaScript API 很糟糕。
只需从月份参数中减去月份数,不用担心该值是否为负数。将会正确处理。
new Date(2014, 0, 1) // 1st Jan 2014
new Date(2014, -1, 1) // 1st Dec 2013
对于所有与日期相关的活动,我建议使用 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。
您可以使用 moment.js 减法函数 为此。
var day = moment("2014-08-28");
day.subtract(1, 'months');
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());
我有办法获取前几个月的数据。
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}`)
);
这将返回所有之前的月份以及月初和月末
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)
}
var makeDate = new Date();
console.log('Original date: ', makeDate.toString());
makeDate.setMonth(makeDate.getMonth() - 6);
console.log('After subtracting half year: ', makeDate.toString());
有人可以向我解释一下这种行为吗?以及如何修复它
今天是 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();