js验证可选时间范围的两种方法:用时间戳与Moment.js分别举例实现日期不能跨30天与日期不能跨12个月

41 篇文章 6 订阅
15 篇文章 1 订阅

前提:时间选择器绑定的值类型取Date,开始时间为startTime,结束时间为endTime,当选择时间发生改变时,执行paramsChange方法,在该方法开头验证所选时间是否正确,若正确则进行接口请求,反之弹出错误提示信息。

在这里插入图片描述

时间显示维度为日时,正常查询显示如下:

在这里插入图片描述
若所选时间范围超过30天,则弹出错误提示信息:
在这里插入图片描述

方法一:用时间戳验证时间范围

    paramsChange(row) {
      this.params = {
        ...this.params,
        ...row,
        // 因为时间维度选的是日,所以当前this.params.dimension的值为'DAY'
        // 将结束时间转化为所选日期的23点59分59秒,将开始时间转化为所选日期的0点0分0秒
        endTime: moment(row.endTime)
          .endOf(this.params.dimension)
          .format("YYYY-MM-DD HH:mm:ss"),
        startTime: moment(row.startTime)
          .startOf(this.params.dimension)
          .format("YYYY-MM-DD HH:mm:ss"),
      };
      if (this.params.dimension == "DAY") {
        // 若结束的时间戳减去开始的时间戳的毫秒数大于30天总计的毫秒数,或者结束时间小于开始时间,则弹出错误信息
        if (
          Date.parse(this.params.endTime) - Date.parse(this.params.startTime) >
            30 * 24 * 60 * 60 * 1000 ||
          Date.parse(this.params.startTime) > Date.parse(this.params.endTime)
        ) {
          this.$message.error(
            // this.$t("lang.CannotExceedTime") + " 30 " + this.$t("lang.day") // 项目国际化写法
            '时间范围不能超过30天或结束时间不能小于开始时间'
          );
          this.columns = [];  // 将页面表格初始化
          this.tableData = [];  // 将页面数据初始化
          return;
        }
      }

	  // 方法二:此处插入else if

      // 若验证成功,则执行接口请求操作
      this.search();
    },

当时间显示维度为月时,若所选时间范围超过12个月,则弹出错误提示信息:
在这里插入图片描述
如果用上述的时间戳方法,如何判断是否闰年的365天和366天呢?这样就会多一个很麻烦的步骤。那么这种情况下结合Moment.js提供的方法就会方便多了:

方法二:用Moment.js提供的方法验证时间范围

// 此处的else if插入到上方代码对应的位置

// 因为时间维度选的是月,所以当前this.params.dimension的值为'MONTH'
	  else if (this.params.dimension == "MONTH") {
		// 若结束日期减去12个月的时间后依然大于开始日期,或结束日期小于开始日期,则弹出错误信息
        if (
          moment(row.endTime).subtract(12, "months").toDate() >
            moment(row.startTime).toDate() ||
          moment(row.startTime).toDate() > moment(row.endTime).toDate()
        ) {
          this.$message.error(
            // this.$t("lang.CannotExceedTime") + " 12 " + this.$t("lang.months") // 项目国际化写法
            '时间范围不能超过12个月或结束时间不能小于开始时间'
          );
          this.columns = [];  // 将页面表格初始化
          this.tableData = [];  // 将页面数据初始化
          return;
        }
      }
       // 若验证成功,则执行接口请求操作
       // ...

完工,今天的内容比较水,图未来方便自己ctrl + c v而记录的,希望也能帮助到读到这儿的可爱的你哈~
THX~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值