javascript angularjs date-format date-formatting

javascript - AngularJS: cómo convertir milisegundos a xHours e yMins



ng-bind-html-unsafe (8)

Tengo un requisito donde quiero convertir milisegundos a xHours y yMins en AngularJS.

Por ej. 3600000 debe mostrarse como 1h 0m.

Intenté usar la date:''H:m'' y la date:''HH:mm'' de los formatos de fecha en el sitio web de Angular.

Pero esos dan 19: 0 y 19:00 en lugar de 1h 0m.

Cualquier sugerencia de lograr esto será útil.

Gracias


Gracias. He modificado ligeramente tu filtro para devolver la duración en formato 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; } });


Hay un convertidor de fecha en AngularJS, simplemente configure el formato de fecha requerido:

{{milliseconds | date:''yyyy-MM-dd HH:mm''}}

También creé dicho filtro ''timeAgo'' usando la función jQuery timeago ():

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

Uso:

{{milliseconds | timeAgo}}

o utilizar juntos ambos formatos para la representación de fecha amplia:

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

Resultado:

12 minutes ago, 2015-03-04 11:38


Para cualquier persona que quiera tener separadores de coma (por ejemplo, ''21 días, 14 horas, 7 minutos ''):

''use strict''; angular.module(''contests'').filter(''duration'', function () { return function(milliseconds) { var seconds = Math.floor(milliseconds / 1000); var days = Math.floor(seconds / 86400); var hours = Math.floor((seconds % 86400) / 3600); var minutes = Math.floor(((seconds % 86400) % 3600) / 60); var dateTimeDurationString = ''''; if ((days > 0) && (hours === 0 && minutes === 0)) dateTimeDurationString += (days > 1) ? (days + '' days '') : (days + '' day ''); if ((days > 0) && (hours > 0 || minutes > 0)) dateTimeDurationString += (days > 1) ? (days + '' days, '') : (days + '' day, ''); if ((hours > 0) && (minutes > 0)) dateTimeDurationString += (hours > 1) ? (hours + '' hours, '') : (hours + '' hour, ''); if ((hours > 0) && (minutes === 0)) dateTimeDurationString += (hours > 1) ? (hours + '' hours '') : (hours + '' hour ''); if (minutes > 0) dateTimeDurationString += (minutes > 1) ? (minutes + '' minutes '') : (minutes + '' minute ''); return dateTimeDurationString; }; });


Prueba este

var app = angular.module ( ''myApp'', [] ) ; app.controller ( ''myController'', function ( $scope, $filter) { $scope.date = $filter(''date'')(milliseconds, ''MM/dd/yyyy''); });


Querrás usar objetos de duración moment''s .

Para hacer lo que quieras, prueba esto:

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

Y el marcado

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

plunkr: http://plnkr.co/edit/2HL75Tmr4CoAy5R9smkx


Utilice la siguiente sintaxis

$filter(''date'')(dateObj, format)

p.ej

$filter(''date'')(1324339200000, ''dd/MM/yyyy'');


Vamos a hacer un filtro personalizado para esto, por ejemplo:

.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; }; });

Entonces úsalo:

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


(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>