AngularJS 2个日期之间的差异

时间:2015-12-14 18:57:47

标签: javascript angularjs date spring-boot

我有一个APP(应用程序是使用springboot为API创建的,AngularJs用于视图。)获取一个incidente启动和完成时的报告,startdate(2015-12-01T08:19:00.000Z)和以enddate(2015-12-06T02:59:00.000Z)为例。

我似乎找不到将两个日期之间的差异设置为新值不可用的好方法。

这是我的.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);

1 个答案:

答案 0 :(得分:4)

我会建议两种方式

<强> 1。手动计算

Calculate difference between 2 timestamps using javascript之前回答

<强> 2。使用Moment.js

moment().format('MMMM Do YYYY, h:mm:ss a'); // December 15th 2015, 11:14:37 am