Javascript AngularJS-如何将毫秒转换为xHours和yMins

Javascript AngularJS-如何将毫秒转换为xHours和yMins,javascript,angularjs,date-format,date-formatting,Javascript,Angularjs,Date Format,Date Formatting,我需要将毫秒转换为AngularJS中的Xhour和Ymin 例如,3600000应显示为1h 0m 我试着使用Angular网站上的日期:'H:m'和日期:'HH:mm' 但是他们给出的是19:0和19:00而不是1:00 实现这一目标的任何指针都会有所帮助 谢谢您需要使用duration对象 要执行所需操作,请尝试以下操作: app.controller 'MainCtrl', ($scope) -> $scope.name = 'World' $scope.milli

我需要将毫秒转换为AngularJS中的Xhour和Ymin

例如,3600000应显示为1h 0m

我试着使用Angular网站上的日期:'H:m'和日期:'HH:mm'

但是他们给出的是19:0和19:00而不是1:00

实现这一目标的任何指针都会有所帮助

谢谢

您需要使用duration对象

要执行所需操作,请尝试以下操作:

app.controller 'MainCtrl', ($scope) ->
    $scope.name = 'World'
    $scope.milliseconds = 3600000
    $scope.duration = moment.duration($scope.milliseconds)
还有标记

<body ng-controller="MainCtrl">
  <p>Milliseconds: {{milliseconds}}</p>
  <p>Duration: {{duration.hours()}}h {{duration.minutes()}}m</p>
</body>

毫秒:{{毫秒}

持续时间:{Duration.hours()}}h{{Duration.minutes()}}m


plunkr:

让我们为此创建一个自定义筛选器,例如:

.filter('millSecondsToTimeString', function() {
  return function(millseconds) {
    var oneSecond = 1000;
    var oneMinute = oneSecond * 60;
    var oneHour = oneMinute * 60;
    var oneDay = oneHour * 24;

    var seconds = Math.floor((millseconds % oneMinute) / oneSecond);
    var minutes = Math.floor((millseconds % oneHour) / oneMinute);
    var hours = Math.floor((millseconds % oneDay) / oneHour);
    var days = Math.floor(millseconds / oneDay);

    var timeString = '';
    if (days !== 0) {
        timeString += (days !== 1) ? (days + ' days ') : (days + ' day ');
    }
    if (hours !== 0) {
        timeString += (hours !== 1) ? (hours + ' hours ') : (hours + ' hour ');
    }
    if (minutes !== 0) {
        timeString += (minutes !== 1) ? (minutes + ' minutes ') : (minutes + ' minute ');
    }
    if (seconds !== 0 || millseconds < 1000) {
        timeString += (seconds !== 1) ? (seconds + ' seconds ') : (seconds + ' second ');
    }

    return timeString;
};
});
.filter('millSecondsToTimeString',function(){
返回功能(毫秒){
var 1秒=1000;
var一分钟=一秒*60;
var一小时=一分钟*60;
var一天=一小时*24;
var秒数=数学下限((百万秒%1分钟)/1秒);
var minutes=数学下限((毫秒%1小时)/1分钟);
var小时=数学下限((百万秒%1天)/1小时);
变量天数=数学下限(毫秒/一天);
var timeString='';
如果(天!==0){
时间字符串+=(天!==1)?(天+“天”):(天+“天”);
}
如果(小时!==0){
时间字符串+=(小时!==1)?(小时+“小时”):(小时+“小时”);
}
如果(分钟!==0){
timeString+=(分钟!==1)?(分钟+'minutes'):(分钟+'minutes');
}
如果(秒!==0 | |毫秒<1000){
时间串+=(秒!==1)?(秒+“秒”):(秒+“秒”);
}
返回时间串;
};
});
然后使用它:

<div>{{ millSeconds | millSecondsToTimeString }}</div>
{{millSeconds}millSecondsToTimeString}

AngularJS中有日期转换器,只需设置所需的日期格式:

{{milliseconds | date:'yyyy-MM-dd HH:mm'}}
我还使用jQuery timeAgo()函数创建了这样的“timeAgo”过滤器:

.filter('timeAgo', function() {
    return function(input) {
        if (input == null) return "";
        return jQuery.timeago(input);
    };
})
用法:

{{milliseconds | timeAgo}}
或同时使用两种格式来表示宽日期:

<span>{{milliseconds | timeAgo}}, {{milliseconds  | date:'yyyy-MM-dd HH:mm'}}</span>

对于希望使用逗号分隔符的任何人(例如“21天14小时7分钟”):


谢谢。我稍微修改了你的过滤器,以hh:mm:ss格式返回持续时间

.filter('duration', function() {
    //Returns duration from milliseconds in hh:mm:ss format.
      return function(millseconds) {
        var seconds = Math.floor(millseconds / 1000);
        var h = 3600;
        var m = 60;
        var hours = Math.floor(seconds/h);
        var minutes = Math.floor( (seconds % h)/m );
        var scnds = Math.floor( (seconds % m) );
        var timeString = '';
        if(scnds < 10) scnds = "0"+scnds;
        if(hours < 10) hours = "0"+hours;
        if(minutes < 10) minutes = "0"+minutes;
        timeString = hours +":"+ minutes +":"+scnds;
        return timeString;
    }
});
.filter('duration',function(){
//以hh:mm:ss格式从毫秒返回持续时间。
返回功能(毫秒){
var秒=数学地板(百万秒/1000);
var h=3600;
var m=60;
var小时=数学地板(秒/小时);
var分钟=数学楼层((秒%h)/m);
var scnds=数学地板((秒%m));
var timeString='';
如果(scnds<10)scnds=“0”+scnds;
如果(小时<10)小时=0“+小时;
如果(分钟<10)分钟=“0”+分钟;
timeString=hours+“:”+minutes+“:”+scnds;
返回时间串;
}
});
试试这个

var app = angular.module ( 'myApp', [] ) ;
app.controller ( 'myController', function ( $scope, $filter) {
    $scope.date = $filter('date')(milliseconds, 'MM/dd/yyyy');
});
(函数(){
"严格使用",;
有棱角的
.module('module_name')
.filter('secondsToDateTime',secondsToDateTime');
函数secondsToDateTime(){
返回功能(秒){
返回新日期(1970,0,1)。设置秒(秒);
};
}
})();
{seconds | secondsToDateTime | date:'HH:mm:ss'}
使用下面的语法

$filter('date')(dateObj, format)
e、 g


用于打字脚本,但可适用于任何语言

convertTimeMS(timeMS: number): string {
  const seconds = Math.floor(timeMS / 1000);
  const minutes = Math.floor(seconds / 60);
  const hours = Math.floor(minutes / 60);

  let str: string = '';

  if(hours > 0) {
    str = str + hours.toString() + 'h ';
  }
  if(minutes%60 > 0) {
    str = str + Number(minutes%60).toString() + 'm ';
  }
  if(seconds%60 > 0) {
    str = str + Number(seconds%60).toString() + 's ';
  }

  return str;
}

您可以编写自定义筛选器<代码>日期不用于显示时间间隔。虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的其他上下文可提高其长期价值。
(function () {
    'use strict';

    angular
        .module('module_name')
        .filter('secondsToDateTime', secondsToDateTime);

    function secondsToDateTime() {
        return function(seconds) {
            return new Date(1970, 0, 1).setSeconds(seconds);
        };
    }
})();


<span>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</span>
$filter('date')(dateObj, format)
$filter('date')(1324339200000, 'dd/MM/yyyy');
convertTimeMS(timeMS: number): string {
  const seconds = Math.floor(timeMS / 1000);
  const minutes = Math.floor(seconds / 60);
  const hours = Math.floor(minutes / 60);

  let str: string = '';

  if(hours > 0) {
    str = str + hours.toString() + 'h ';
  }
  if(minutes%60 > 0) {
    str = str + Number(minutes%60).toString() + 'm ';
  }
  if(seconds%60 > 0) {
    str = str + Number(seconds%60).toString() + 's ';
  }

  return str;
}