如何使用 moment.js 动态获取去年九月的日期
How to get date of last september dynamically with moment.js
我需要去年九月的日期 moment.js - 但动态。
当前日期
currentDate:string = moment().format('YYYY-MM'); // This will be 2017-10
如何知道从当前日期算起最后一个九月是什么时候?我需要这样的想法:
lastSteptember = moment(this.currentDate).getDateOfLast('september').format('YYYY-MM');
所以现在的结果是:
2017-09
但 3 个月前 结果会是 另一个:
2016-09
如何使用 moment.js 处理这个问题?
我不知道如何让它与时刻一起工作。但是您可以使用我的函数按月数获取上个月:
var getLastMonth = function(month){
if(month<1 || month>12) return undefined;
let year = (month<=moment().month())? (moment().year()) : (moment().year()-1);
return moment(month + "-" + year, "MM-YYYY");
}
使用它:
getLastMonth(11); //return 11-2016
getLastMonth(10); //return 10-2017
getLastMonth(9); //return 09-2017
我找到了一个很好的解决方案并像这样解决了它:
currentYear: number = moment().year();
lastYear: number = moment().subtract(1, 'years').year();
nextYear: number = moment().add(1, 'years').year();
if(moment().isSameOrAfter(this.currentYear + '-09-01', 'month')) {
this.currentServiceYearStartDate = this.currentYear + '-09-01';
this.currentServiceYearEndDate = this.nextYear + '-08-31';
} else {
this.currentServiceYearStartDate = this.lastYear + '-09-01';
this.currentServiceYearEndDate = this.currentYear + '-08-31';
}
console.log('Startdate: ' + this.currentServiceYearStartDate);
console.log('Enddate: ' + this.currentServiceYearEndDate);
如果给定的月份小于当前月份,此函数将return上一年的月份,否则将return当前年份的月份。
function getMonthWithPresentOrPastYear(month, format) {
currentMonth = parseInt(moment().format('M'));
givenMonth = parseInt(moment().month(month).format('M'));
format = format || 'YYYY-MM';
return (givenMonth >= currentMonth) ?
moment().month(month).format(format) : // Present
moment().month(month).subtract(1, 'year').format(format); // Past
};
getMonthWithPresentOrPastYear('January'); // returns '2016-01'
getMonthWithPresentOrPastYear('September'); // returns '2016-09'
getMonthWithPresentOrPastYear('October'); // returns '2017-10'
getMonthWithPresentOrPastYear('December', 'YYYY/DD'); // returns '2017/12'
您可以尝试以下方法:
Object.getPrototypeOf(moment()).getLast = function(month,format="YYYY-MM"){
var date;
if(this.diff("01 "+month+" "+this.year()) >= 0 || this.format("MMMM").toLowerCase() === month.toLowerCase)
date = moment(this).month(month);
else
date = moment(this).month(month).subtract(1,"years");
return date.format(format);
});
在上面JavaScript我们检查当前时刻对象中的月份是否已经过去。
这允许我们直接检查任何时刻和任何月份的对象,例如:
var customDate = moment("01 December 2001");
customDate.getLast("September"); //"2001-09"
我需要去年九月的日期 moment.js - 但动态。
当前日期
currentDate:string = moment().format('YYYY-MM'); // This will be 2017-10
如何知道从当前日期算起最后一个九月是什么时候?我需要这样的想法:
lastSteptember = moment(this.currentDate).getDateOfLast('september').format('YYYY-MM');
所以现在的结果是:
2017-09
但 3 个月前 结果会是 另一个:
2016-09
如何使用 moment.js 处理这个问题?
我不知道如何让它与时刻一起工作。但是您可以使用我的函数按月数获取上个月:
var getLastMonth = function(month){
if(month<1 || month>12) return undefined;
let year = (month<=moment().month())? (moment().year()) : (moment().year()-1);
return moment(month + "-" + year, "MM-YYYY");
}
使用它:
getLastMonth(11); //return 11-2016
getLastMonth(10); //return 10-2017
getLastMonth(9); //return 09-2017
我找到了一个很好的解决方案并像这样解决了它:
currentYear: number = moment().year();
lastYear: number = moment().subtract(1, 'years').year();
nextYear: number = moment().add(1, 'years').year();
if(moment().isSameOrAfter(this.currentYear + '-09-01', 'month')) {
this.currentServiceYearStartDate = this.currentYear + '-09-01';
this.currentServiceYearEndDate = this.nextYear + '-08-31';
} else {
this.currentServiceYearStartDate = this.lastYear + '-09-01';
this.currentServiceYearEndDate = this.currentYear + '-08-31';
}
console.log('Startdate: ' + this.currentServiceYearStartDate);
console.log('Enddate: ' + this.currentServiceYearEndDate);
如果给定的月份小于当前月份,此函数将return上一年的月份,否则将return当前年份的月份。
function getMonthWithPresentOrPastYear(month, format) {
currentMonth = parseInt(moment().format('M'));
givenMonth = parseInt(moment().month(month).format('M'));
format = format || 'YYYY-MM';
return (givenMonth >= currentMonth) ?
moment().month(month).format(format) : // Present
moment().month(month).subtract(1, 'year').format(format); // Past
};
getMonthWithPresentOrPastYear('January'); // returns '2016-01'
getMonthWithPresentOrPastYear('September'); // returns '2016-09'
getMonthWithPresentOrPastYear('October'); // returns '2017-10'
getMonthWithPresentOrPastYear('December', 'YYYY/DD'); // returns '2017/12'
您可以尝试以下方法:
Object.getPrototypeOf(moment()).getLast = function(month,format="YYYY-MM"){
var date;
if(this.diff("01 "+month+" "+this.year()) >= 0 || this.format("MMMM").toLowerCase() === month.toLowerCase)
date = moment(this).month(month);
else
date = moment(this).month(month).subtract(1,"years");
return date.format(format);
});
在上面JavaScript我们检查当前时刻对象中的月份是否已经过去。
这允许我们直接检查任何时刻和任何月份的对象,例如:
var customDate = moment("01 December 2001");
customDate.getLast("September"); //"2001-09"