为了账号安全,请及时绑定邮箱和手机立即绑定

在某些月份停止增加和减少月份

在某些月份停止增加和减少月份

繁星点点滴滴 2022-01-07 16:03:42
目前我在一个窗口中显示 6 个月(从 2019 年 11 月到 2019 年 4 月)。用户可以转到上一个/过去 12 个月(直到 2018 年 11 月),并且可以再前进一个月(2019 年 5 月)。用户可以转到前几个月,也可以转到未来几个月,但我需要限制它。  months: any[] = [];    date = new Date();       month = this.date.getMonth();    year = this.date.getFullYear()      ngOnInit() {          this.getMonths(this.year, this.month);        }        getMonths(year:number, month:number) {        this.months = [];          for (let i = 0; i < 6; i++) {            this.months.push(new Date(year, month++));          }        }        getNextData() {         this.month++;         this.getMonths(this.year, this.month);        }        getPreviousData(){        this.month--;       this.getMonths(this.year, this.month);     }
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我认为以下内容可以帮助您。我重写了你的一些函数并引入了一个辅助函数,用于设计以月表示的日期之间的差异。(因此,如果两个日期相隔一年,则此函数将返回 12)。


然后,您可以根据它们之间的差异比较两个日期。


我还添加了两个值,this.currMonth并且this.currYear使您可以充分比较this.month和this.year它的原始值。这样想,如果要检查 ifthis.month是否大于以前,则无法检查 if,this.month > this.month + 1因为显然this.month不大于自身加一。而且,如果您增加它,您将重新分配该值,并且您将永远无法与this.month比自身大的值进行比较。this.currMonth并且this.currYear是不变的,因此他们总是可以是一个很好的项目进行比较this.year,并this.month当您确定是否要递增/递减。


这些函数还决定了年份应该何时改变。例如,如果您返回一个月(从 1 月到 12 月),则需要将年份从 2019 年更新到 2018 年。此外,如果月份为 0(1 月),则不能递减它,因为您将得到 -1,不能用作日期比较的月份。您需要将日期更改为 11。相反,如果您从 12 月递增到 1 月,则需要将this.year2018 年更改为 2019 年,而不是递增this.month(这将给您 13-不是有效月份),您需要将其赋值为 0。


months: any[] = [];

    date = new Date();

    currMonth = this.date.getMonth();

    month = this.date.getMonth();

    currYear = this.date.getFullYear();

    year = this.date.getFullYear();


      ngOnInit() {

          this.getMonths(this.year, this.month);

        }


        getMonths(year:number, month:number) {

        this.months = [];

          for (let i = 0; i < 6; i++) {

            this.months.push(new Date(year, month++));

          }


        }


        getNextData() {

         var d1 = new Date(this.currYear, this.currMonth)

         var d2 = new Date(this.year , this.month + 1)

         var diff = this.diff_months(d2, d1)

         if (diff <= 1){

           if (this.month === 11){

                 this.month = 0

                 this.year++

           } else {

                 this.month++ 

           }

         }

       }


       getPreviousData(){

          var m = this.month - 1

          var d1 = new Date(this.currYear, this.currMonth)

          if (this.month === 0){

            var d2 = new Date(this.year-1, 11)

          } else {

            var d2 = new Date(this.year, m)

          }

 

          var diff = this.diff_months(d1, d2)

  

          if (diff <= 12){

             if (m < 0){

               this.month = 11

               this.year--

             } else {

               this.month--

             }

         }

      }

      

      diff_months = (dt2, dt1) => {

         var diff =(dt2.getTime() - dt1.getTime()) / 1000;

         diff /= (60 * 60 * 24 * 7 * 4);

         return Math.abs(Math.round(diff));

      }


查看完整回答
反对 回复 2022-01-07
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信