我有一个日期选择器和一个表格,显示从1月到12月的月份,用户可以逐年切换,并在表格中显示该年份的数据。
现在我想将其更改为新的选择器: 默认情况下,我将在用户打开应用程序时显示当前年份。
但是当你点击日期选择器中的前进箭头时,它不会整整转换1年,相反,你可以前进6个月或后退6个月。
如果您前进或后退6个月,将如何显示数据的示例:
Default -> 1st Jan 2018 - 31 Dec 2018;
Forward 6months -> 1st July 2018 - 31 June 2019;
Backwards 6months -> 1st July 2017 - 31 June 2018
因此,表格中将显示12个月,但现在您将向前和向后退出6个月。
这是我目前的代码,我正在使用momentJS:
首先,控制器在您打开应用程序时加载2个参数,用户ID和日期(当前日期)。
export interface AppParams extends ng.ui.IStateParamsService {
personalId: string;
date: string;
}
export class appCtrl {
static $inject = [
"$stateParams",...
constructor(
public params: AppParams,..
然后我有一个已解决的变量,并根据当前日期包含年份的开头:
resolve: {
beginOfYear: [
"$stateParams",
"date",
(params: AppParams, date: number) => {
return moment
.utc(date)
.startOf("year")
.valueOf();
}
],
然后我有一个观察器用于用户何时更改年份,因此它使用新的日期参数加载新状态:
this.dateSelector = moment.utc(beginOfYear).toDate();
$scope.$watch(
() => this.dateSelector,
newDate => {
if (
newDate &&
this.beginOfYear !==
moment
.utc(newDate)
.startOf("year")
.valueOf()
) {
this.changeYear(newDate.valueOf());
}
},
true
);
最后是2个向前和向后移动的函数,以及用新日期实际加载新状态的函数:
moveForward() {
this.changeYear(
moment
.utc(this.beginOfYear)
.add(1, "year")
.valueOf()
);
}
moveBack() {
this.changeYear(
moment
.utc(this.beginOfYear)
.add(-1, "year")
.valueOf()
);
}
private changeYear(newDate: number) {
if (newDate != this.beginOfYear) {
const newParams: AppParams = {
personalId: this.params.personalId,
date: moment.utc(newDate).format("YYYYMMDD")
};
this.$state.go("AppX", newParams);
}
}
所以我尝试了各种各样的东西,但它们没有用,主要的问题是一年一年很容易,我只是你的时间startOf()
,并且总是返回1月1日,只是改变年份,
这里我的主要问题是我所谈论的断点的6个月的范围,必须得到尊重,你不能只从当前日期增加6个月,但范围必须始终为01-12 -> 07-06 -> 01-12
(表示为月号)
我觉得这可以通过稍微改变我的代码来实现,如果可能的话我不想写全新的功能,谢谢