2014-04-10 93 views
-1

我想计算天差异。点击一个按钮加载一个包含两个日期值输入的弹出窗口。并从对话框中的确定让我回到页面的天差。 到目前为止,我想这一点,如何在angularjs中使用对话框查找日期差异

在控制器:

$scope.myitems = ['01/01/2014','01/01/2014']; 

    $scope.openDlg = function() { 

     var modalInstance = $modal.open({ 
      template: '<div><input cx-Date ng-model="myitems.date1"/><input cx-Date ng-model="myitems.date2"/><button ng-click="ok()">OK</button></div>', 
      controller: ModalInstCtrl, 
      resolve: { 
       myitems: function() { 
        return $scope.myitems; 
       } 
      } 
     }); 

     modalInstance.result.then(function (myitems) { 
      $scope.myitems = myitems; 
       var dt1 = myitems.date1.split('/'), 
        dt2 = myitems.date2.split('/'), 
        one = new Date(dt1[2], dt1[1], dt1[0]), 
        two = new Date(dt2[2], dt2[1], dt2[0]); 

       var millisecondsPerDay = 1000 * 60 * 60 * 24; 
       var millisBetween = two.getTime() - one.getTime(); 
       var days = millisBetween/millisecondsPerDay; 

       $scope.diff= Math.floor(days); 

     }, function() { 
      $log.info('Modal dismissed at: ' + new Date()); 
     }); 
    }; 

    var ModalInstCtrl = function ($scope, $modalInstance, myitems) { 

     $scope.myitems = myitems; 
     $scope.ok = function() { 
      $modalInstance.close($scope.myitems);//.TotalDays; .getTime() - $scope.myitem.date1.getTime()); 
     }; 

     $scope.cancel = function() { 
      $modalInstance.dismiss('cancel'); 
     }; 

    }; 

模板调用对话框:

<div> 
     <button class="btn btn-default" ng-click="openDlg()">Calender</button> 
     <p>{{ diff}}</p> 
    </div> 
+0

你真的应该看看moment.js,它将使这个SOOOO容易 – aet

回答

0

你应该能够简化你的函数一点。请参阅本SO帖子:Get difference between 2 dates in javascript?

var _MS_PER_DAY = 1000 * 60 * 60 * 24; 

var dt1 = new Date($scope.myitems.date1); 
var dt2 = new Date($scope.myitems.date2); 

dateDiffInDays(dt1, dt2); 

// a and b are javascript Date objects 
function dateDiffInDays(a, b) { 
    // Discard the time and time-zone information. 
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); 
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); 

    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 

这是一个很好的解决方案,因为它忽略夏令时&发现在时间上的实际差异。


另一种选择:(如果你的字符串日期不正确评估有用使用new Date()

var _MS_PER_DAY = 1000 * 60 * 60 * 24; 

dateDiffInDays('01/02/2014','01/02/2013'); 

// a and b are assumed to be in the format '01/02/2014' 
function dateDiffInDays(a, b) { 
    // Discard the time and time-zone information. 
    var dt1 = Date.parse(a + ' UTC'); //appending 'UTC' within Date.parse() will return the # of MS in UTC 
    var dt2 = Date.parse(b + ' UTC'); 

    return Math.floor((dt2 - dt1)/_MS_PER_DAY); // return -365 
} 
+0

这是没有的。为我工作,我试过这个, – user3421352

+0

我修改了它,注意你如何格式化你的日期,我猜这就是你原来的代码中的错误点 – EnigmaRM

+0

我在模态控制器中定义函数时遇到了问题 – user3421352

相关问题