AngularJS两个日期之间的差异

3

我有一个应用程序(该应用程序使用SpringBoot构建API和AngularJs构建视图),可以获取关于事件开始和结束时间的报告,例如,startdate(2015-12-01T08:19:00.000Z)和enddate(2015-12-06T02:59:00.000Z)。

我似乎找不到一种好的方法来设置两个日期之间的差异为新值unavailability。

这是我的.js文件:

        .controller(
        'IncidenteController',
        [
                '$scope',
                '$http',
                '$routeParams',
                'urlinc',
                '$location',
                function($scope, $http, $routeParams, urlinc, $location) {

                    var url = urlinc.getUrlinc();

                    var onError = function(reason) {
                        $scope.error = "No se pudo encontrar";
                    };

                    var code = $routeParams.codename;

                    console.log(code);

                    var onTecnicoComplete = function(response) {
                        $scope.tecnicos = response.data;
                    };

                    var onHardwareComplete = function(response) {
                        $scope.hardwares = response.data;
                    };

                    var onSoftwareComplete = function(response) {
                        $scope.softwares = response.data;
                    };

                    var onSistemaComplete = function(response) {
                        $scope.sistemas = response.data;
                    };

                    var onIncidenteComplete = function(response) {

                        try {
                            $scope.incidente = response.data;
                        } catch (error) {
                            console.error(error);
                        }
                    };

                    $http.get(url + code)
                            .then(onIncidenteComplete, onError);

                    $http.get("http://localhost:8080/tecnico/").then(
                            onTecnicoComplete);

                    $http.get("http://localhost:8080/hardware/").then(
                            onHardwareComplete);

                    $http.get("http://localhost:8080/software/").then(
                            onSoftwareComplete);

                    $http.get("http://localhost:8080/sistema/").then(
                            onSistemaComplete);

                    $scope.saveIncidente = function(incidente) {
                        console.log(incidente);

                        return $http.post(url, incidente).success(
                                function(data, status, headers, config) {
                                    var status2 = '/' + status + '/';
                                    $location.url(status2);
                                    return status.data;
                                }).error(function(status) {
                            var status2 = '/' + status.status + '/';
                            console.log(status2);
                            $location.url(status2);
                            return status.data;
                        })
                    };

                    $scope.hardwares = [];

                    $scope.hardwareListener = function() {
                        console.log($scope.hardwares);
                    }

                    $scope.tecnicoListener = function() {
                        console.log($scope.incidente.tecnico);
                    }

                    $scope.date = new Date();

                    $scope.open = function($event) {
                        $event.preventDefault();
                        $event.stopPropagation();

                        $scope.opened = true;
                    };

                    var that = this;

                    this.dates = {
                      apertura: new Date(),
                      cierre: new Date(),
                    };

                    this.open = {
                    apertura: false,
                    cierre: false,
                      };

                    // Disable weekend selection
                    this.disabled = function(date, mode) {
                      return (mode === 'day' && (new Date().toDateString() == date.toDateString()));
                    };

                    this.dateOptions = {
                      showWeeks: false,
                      startingDay: 1
                    };

                    this.timeOptions = {
                      readonlyInput: false,
                      showMeridian: false
                    };

                    this.dateModeOptions = {
                      minMode: 'year',
                      maxMode: 'year'
                    };

                    this.openCalendar = function(e, date) {
                        that.open[date] = true;
                    };

                    // watch date1 and date2 to calculate difference
                    this.calculateWatch = $scope.$watch(function() {
                      return that.dates;
                    }, function() {
                      if (that.dates.apertura && that.dates.cierre) {
                        var diff = that.dates.apertura.getTime() - that.dates.cierre.getTime();
                        that.dayRange = Math.round(Math.abs(diff/(1000*60*60*24)))
                      } else {
                        that.dayRange = 'n/a';
                      }
                    }, true);

                    $scope.$on('$destroy', function() {
                      that.calculateWatch();
                    });

                } ])

编辑:这是我成功使其工作的方法:

      $scope.calcularIndisponibilidad = function(incidente){

                        var cierre = incidente.cierre;

                        var apertura = incidente.apertura;

                        var date1 = Date.parse(cierre);

                        var date2 = Date.parse(apertura);

                        var difference = date1 - date2;
                         console.log(difference);

                        var daysDifference = Math.floor(difference/1000/60/60/24);
                        difference -= daysDifference*1000*60*60*24

                        var hoursDifference = Math.floor(difference/1000/60/60);
                        difference -= hoursDifference*1000*60*60

                        var minutesDifference = Math.floor(difference/1000/60);
                        difference -= minutesDifference*1000*60

                        var indisponibilidad = 'difference = ' + daysDifference + ' day/s ' + hoursDifference + ' hour/s ' + minutesDifference + ' minute/s ';

                        console.log(indisponibilidad);

getTime()可能是不必要的。我相信从一个日期中减去另一个日期已经返回了毫秒差异。 - stephen.vakil
由于某些原因,我似乎无法弄清如何以“正确的方式”进行减法。 - r007
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接