角度表单验证 - 将毫秒转换为有效日期对象

时间:2015-01-25 17:19:22

标签: javascript angularjs validation

我目前在表单验证和毫秒方面遇到问题。我猜测以毫秒为单位的时间不是有角度的有效日期格式,例如angular.isDate(1418645071000)返回false。

但是我的代码中要改变什么,以便表单验证工作正常?我对服务器没有任何限制 - 意味着日期格式为#34;星期六03年03月00:00:00 GMT + 0100(CET)"也是可以接受的。

这是代码: http://plnkr.co/edit/lZZh5VvCzH6yYh1t8xVM?p=preview

2 个答案:

答案 0 :(得分:1)

我在stackoverflow https://stackoverflow.com/a/22658709/2012123

上找到了一个基于此线程的解决方案

我将modelValue过滤为自定义日期格式。所以viewValue将采用格式' dd.Mm.yy'。

ngModelCtrl.$formatters.push(function(modelValue) {
      if(modelValue) {
        var filtered = $filter('date')(modelValue, 'dd.MM.yy');
        return filtered;
      }
    });

使用以下代码,我立即将我的毫秒转换为有效日期

/*https://stackoverflow.com/questions/22639485/angularjs-how-to-change-the-value-of-ngmodel-in-custom-directive*/
    // $parse works out how to get the value.
    // This returns a function that returns the result of your ng-model expression.
    var modelGetter = $parse(attrs['ngModel']);
    console.log(modelGetter(scope));
    var timeInMilliseconds = modelGetter(scope);

    if(timeInMilliseconds != null) {
      // This returns a function that lets us set the value of the ng-model binding expression:
      var modelSetter = modelGetter.assign;

      // This is how you can use it to set the value 'bar' on the given scope.
      modelSetter(scope, new Date(timeInMilliseconds));
      console.log(modelGetter(scope));
    }

我已相应更新了http://plnkr.co/edit/lZZh5VvCzH6yYh1t8xVM?p=preview。现在没有更多的验证错误。

答案 1 :(得分:0)

angular.isDate检查提供的参数是否为日期类型的对象。

您首先需要使用new Date(milliseconds)

将毫秒转换为日期