You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AngularJS Material日期选择器仅显示18年前的日期?

解决AngularJS Material日期选择器仅显示18年前日期的问题

要实现这个需求,核心是通过md-max-date限制可选的最大日期为当前日期往前推18年,同时配合日期过滤器让不可选日期灰化,具体步骤如下:

1. 在控制器中计算18年前的日期

首先在你的AngularJS控制器里,计算出当前日期减去18年的日期,把它赋值给作用域变量供视图使用:

angular.module('yourAppModule').controller('YourController', ['$scope', function($scope) {
  // 获取当前日期
  const today = new Date();
  // 计算18年前的同一天:注意Date的月份是0-based(0=1月,11=12月),直接使用当前月份即可
  $scope.maxDate = new Date(today.getFullYear() - 18, today.getMonth(), today.getDate());

  // 更新日期过滤器函数,确保只返回<=maxDate的日期
  this.dateOfBirth = function(date) {
    return date <= $scope.maxDate;
  };
}]);

2. 更新日期选择器的HTML代码

确保你的md-datepicker正确绑定md-max-date,并且过滤器函数关联正确:

<md-datepicker 
  ng-model="ln.dateofbirth" 
  md-current-view="year" 
  md-date-filter="ctrl.dateOfBirth" 
  md-max-date="maxDate" 
  md-placeholder="Date Of Birth" 
  required
></md-datepicker>

关键说明

  • md-max-date是AngularJS Material日期选择器的原生属性,直接限制用户能选择的最大日期,超过这个日期的选项会被禁用。
  • md-date-filter用于进一步过滤可选日期,这里我们让它只返回小于等于maxDate的日期,确保所有未满18年的日期都不可选且灰化显示。
  • 注意日期计算的细节:Date构造函数的月份参数是从0开始的,所以不需要额外调整月份值,直接使用当前日期的月份即可得到准确的18年前的同一天。
  • 确保你的视图已经通过ng-controller="YourController as ctrl"关联到对应的控制器,这样ctrl.dateOfBirth才能正确调用过滤器函数。

内容的提问来源于stack exchange,提问作者jeevi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:42:20