角材料日期选择器字段值空

时间:2016-11-10 15:21:21

标签: angularjs datepicker material-design

我想获得用户的出生日期,预定义的最小和最大日期工作正常。 我想要的日期格式是DD-MM-YYYY,为此我在config中定义了以下内容;

app.config(['$mdDateLocaleProvider', function ($mdDateLocaleProvider) {
      $mdDateLocaleProvider.formatDate = function(date) {
         return moment(date).format('DD-MM-YYYY');
      }}]);

并且控制器已

    $scope.user = {};
    $scope.user.dob = new Date();
    $scope.maxDate = new Date(
       $scope.user.dob.getFullYear() - 10,
       $scope.user.dob.getMonth(),
       $scope.user.dob.getDate()
    );
    $scope.minDate = new Date(
       $scope.user.dob.getFullYear() - 120,
       $scope.user.dob.getMonth(),
       $scope.user.dob.getDate()
    );

和HTML是;

<md-datepicker 
 ng-model="user.dob" 
 md-placeholder="Enter date of birth"
 md-min-date="minDate" 
 md-max-date="maxDate">
</md-datepicker>

使用此代码,该字段默认显示当前日期,我不想要,

我希望默认情况下日期字段为空。

此外,我想以两种方式获取值,如下所示 1)日期 - 月 - 年 和 2)日期 - 月 - 年 - 小时 - 分 - 秒

当我试图获得价值时,它会显示“09-11-2016T18:30:00.000Z”

我想要“09-11-2016”或“09-11-2016 18:30:00”

2 个答案:

答案 0 :(得分:5)

您的mdDateLocaleProvider不会检查空值。

你的问题是:

app.config(['$mdDateLocaleProvider', function ($mdDateLocaleProvider) {
  $mdDateLocaleProvider.formatDate = function(date) {
     return moment(date).format('DD-MM-YYYY');
  }}]);

它需要像:

$mdDateLocaleProvider.formatDate = function(date) {
   var m = moment(date);
   return m.isValid()? m.format('DD-MM-YYYY') : '';
};

然后你可以设置

$scope.user.dob=null;

获得一个空的Datepicker。

答案 1 :(得分:1)

问题在于你的模型。您正在使用当前日期初始化它:

$scope.user.dob = new Date();

简单地清空这个变量,你就会好;)