如何使用Angularjs将视图日期绑定到模型毫秒

时间:2014-07-01 19:28:32

标签: angularjs date angularjs-directive milliseconds

我想在视图上绑定Date类型的输入 使用Angularjs到模型中的毫秒属性。

例如:
用户设置" 09/23/2014"进入该领域 和angularjs自动设置" 1411423200000"
进入与输入的模型属性绑定。

我没有找到任何指令或过滤器来做到这一点。

感谢您的帮助。


更新以详述我的问题。

是否有"原生"在Angularjs拦截的方式 模型,以查看和查看模型和转换我的数据?

6 个答案:

答案 0 :(得分:2)

您可以使用ng-change https://docs.angularjs.org/api/ng/directive/ngChange

                $scope.onDateChange = function() {
                  if (this.node.mydate) {
                    this.node.mydate = this.node.mydate.getTime();
                  }
                };

在视图中

 <input type="text" ng-model="node.mydate" id="adate" name="adate" datepicker-popup="dd MMM yyyy HH:mm" ng-change="onDateChange()"/>

答案 1 :(得分:1)

我找到了一个解决方案:

ngModel.$parsers.push(fromUser);  
ngModel.$formatters.push(toUser);  

有了这个,我在绑定期间动态更改数据格式。

请参阅jsfiddle

中的完整解决方案

答案 2 :(得分:1)

你可以简单地使用它,它对我有用:

$scope.dateValue = new Date(dateInMilliSeconds);

它将以MM/DD/YYYY格式直接将您的日期(以毫秒为单位)转换为日期,这是以下格式的默认格式:

<input id="myDateID" name="myDateName" date-parser="MM/DD/YYYY" ng-model="dateValue" type="date"  class="form-control input-md" aria-describedby="sizing-addon3"/>

答案 3 :(得分:0)

你可以使用js Date.parse(),请看这里:http://jsbin.com/doyise/1/edit

JS:

   var app = angular.module('app', []);

app.controller('firstCtrl', function($scope){
  $scope.date = "";
  $scope.$watch("date", function(value)
               {
                 if(value)
                   {
                 $scope.mils = Date.parse($scope.date);
                   }
               });


});

HTML:

   <!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body ng-app="app">
  <div ng-controller="firstCtrl">
    <input ng-model="date" type="date"/>
     <p> Date in : {{date}}</p>
    <p> Date in ms: {{mils}}</p>
  </div>

</body>
</html>

答案 4 :(得分:0)

基本上来自@asicfr的解决方案,但更具表现力:

    $zone = $result1->Sites;
    if(isset($_POST['rayat'])){
        echo 'ID: ' . $zone[0]->id . '<br>SiteID: ' . $zone[0]->siteid;
    } else {
    ...

答案 5 :(得分:0)

你的JSFiddle似乎已经失去了它的双向绑定。我没有对问题进行审核,而是将其分解为更简单的整体解决方案。

这是它的核心:

.directive('toDate', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    scope: true,
    link: function(scope, el, attrs, ngModel) {

        ngModel.$formatters.push(function(value) { //show the user the date
            return new Date(value);
        });
        ngModel.$parsers.push(function(value){
            return +new Date(value); //convert back to milliseconds
        });
    }
};

})

首先,棱角1.4处理得更好。其次,在新的小提琴中注意输入类型处理格式。最后,示例中的所有3个输入都以角度绑定到相同的数据点,允许您分别更新日期和时间。 “文本”类型对你没什么用处,我把它留在那里仅供显示。