AngularJS将momentJS的日期更改为6个月的范围

时间:2018-06-08 08:16:24

标签: angularjs date datepicker momentjs

我有一个日期选择器和一个表格,显示从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(表示为月号)

我觉得这可以通过稍微改变我的代码来实现,如果可能的话我不想写全新的功能,谢谢

0 个答案:

没有答案