2015-02-08 49 views
21

我正在使用Angularjs。Angularjs秒到時間過濾器

我有一串數字,例如:237。這意味着秒。我需要將其更改爲:2:343:42:54

我需要幾秒到時間篩選。我應該怎麼做?

謝謝。

+3

也許'237'需要改變,以'2:37'?爲什麼'3:42:54'?變化的邏輯是什麼? – 2015-02-08 13:52:08

+1

237是秒。 – 2015-02-08 14:02:19

+3

你的237秒轉換爲2:34的邏輯不清楚。 237秒是3分57秒(60 * 3 + 57 = 237秒)。那麼你如何在2:34到達?或2:34應該是一天中的時間(下午2:34)?這些都沒有意義,直到你可以解釋你如何將237秒翻譯成2:34或3:42:54的邏輯。 – 2015-02-08 17:11:57

回答

68

嘗試這樣:

app.filter('secondsToDateTime', [function() { 
    return function(seconds) { 
     return new Date(1970, 0, 1).setSeconds(seconds); 
    }; 
}]) 

HTML:

<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b> 

Demo

+0

簡單而有效! – ilter 2015-03-07 20:10:57

+0

輝煌!謝謝! – bobjones 2015-06-26 18:55:42

+0

2年後 - >仍然優雅 – dwkd 2017-10-19 03:48:07

2

我認爲這是沒有必要的自定義過濾器

<b>{{hours}}{{seconds | date:':mm:ss'}}</b> 

function Scoper($scope) { 
    $scope.seconds = '79000'; 
    $scope.hours = parseInt($scope.seconds/3600); 
} 
+2

自定義過濾器可能不是必需的,但第二個需要在不同頁面上使用這個邏輯,最少額外的時間投入以獲得過濾器或指令就可以得到回報。你可以把它放在根範圍上,但這是你應該忽略的另一種代碼。 – Mattygabe 2015-08-27 00:26:12

25

manzapanza的一個如果秒數少於86400(1天),nsWS纔有效。日期對象需要完全爲零。另外,最好還是返回實際的日期對象,以便angularjs不必再次創建它。

app.filter('secondsToDateTime', function() { 
    return function(seconds) { 
     var d = new Date(0,0,0,0,0,0,0); 
     d.setSeconds(seconds); 
     return d; 
    }; 
}); 

<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b> 

編輯:如果你想要小時上面去24沒有包裝,以天最好不要使用日期:

app.filter('secondsToTime', function() { 

    function padTime(t) { 
     return t < 10 ? "0"+t : t; 
    } 

    return function(_seconds) { 
     if (typeof _seconds !== "number" || _seconds < 0) 
      return "00:00:00"; 

     var hours = Math.floor(_seconds/3600), 
      minutes = Math.floor((_seconds % 3600)/60), 
      seconds = Math.floor(_seconds % 60); 

     return padTime(hours) + ":" + padTime(minutes) + ":" + padTime(seconds); 
    }; 
}); 

<b>{{seconds | secondsToTime}}</b> 
+0

10秒鐘,這樣的解決方案顯示1天10秒。 – mpz 2015-09-03 08:44:00

+0

什麼是「應用程序」?在'app.filter'中,我們應該在哪裏放置過濾器? – 2017-03-05 12:50:17

+1

@DanyY app是你的模塊:var app = angular.module('myapp',[]); – makman99 2017-03-06 14:12:12

0

通過天@manzapanza溶液:

$scope.duration_for = function(seconds){ 
    if(!seconds) return 
    var duration = new Date(1970, 0, 1).setSeconds(seconds) 

    var mask = 'HH:mm' 
    if(seconds >= 86400){ 
     mask = 'd days,' + mask 
    } 

    return $filter('date')(duration, mask); 
    } 

鑑於:

{{duration_for(100500)}} 
5
app.filter('formatTimer', function() { 
return function (input) { 
    function z(n) { return (n < 10 ? '0' : '') + n; } 
    var seconds = input % 60; 
    var minutes = Math.floor(input % 3600/60); 
    var hours = Math.floor(input/3600); 
    return (z(hours) + ':' + z(minutes) + ':' + z(seconds)); 
}; 

將輸出:2點04分14秒

7

嘗試這種情況:

app.filter('secondsToHHmmss', function($filter) { 
    return function(seconds) { 
     return $filter('date')(new Date(0, 0, 0).setSeconds(seconds), 'HH:mm:ss'); 
    }; 
}) 

HTML:

<b>{{seconds | secondsToHHmmss}}</b> 
+0

我需要放棄'[]'使這項工作,並分秒爲1000,因爲我在處理毫秒 – 2016-01-21 05:55:02

+0

謝謝。剛剛修改。 – endru 2016-01-22 04:42:04