2015-02-08 12 views
21

मैं Angularjs का उपयोग कर रहा हूँ।कोणीय सेकंड्स समय फ़िल्टर करने के लिए

मेरे पास संख्या की स्ट्रिंग है, उदाहरण: 237। इसका मतलब सेकंड है। मुझे इसे बदलने की आवश्यकता है: 2:34, या 3:42:54

मुझे समय-समय पर फिल्टर की आवश्यकता है। मुझे इसे कैसे बनाना चाहिए?

धन्यवाद। इस तरह

+3

हो सकता है कि '' 237' 2 को बदलने की जरूरत: 37'? क्यों '3: 42: 54'? परिवर्तन में तर्क क्या है? –

+1

237 सेकंड है। –

+3

आपका तर्क 237 सेकेंड कैसे बदलता है 2:34 को अस्पष्ट है। 237 सेकंड 3 मिनट और 57 सेकंड (60 * 3 + 57 = 237 सेकंड) है। तो आप 2:34 पर कैसे पहुंच रहे हैं? या 2:34 दिन का समय होना चाहिए (2:34 बजे)? इनमें से कोई भी वास्तव में समझ में नहीं आता है, जब तक कि आप इस तर्क को समझा नहीं सकते कि आप 237 सेकेंड का अनुवाद कैसे कर रहे हैं 2:34 या 3:42:54। –

उत्तर

68

कोशिश कुछ:

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

एचटीएमएल:

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

Demo

+0

सरल, और काम करता है! – ilter

+0

शानदार! धन्यवाद! – bobjones

+0

2 साल बाद -> अभी भी सुरुचिपूर्ण – dwkd

2

मुझे लगता है कि यह आवश्यक कस्टम फ़िल्टर

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

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

कस्टम फ़िल्टर आवश्यक नहीं हो सकता है, लेकिन दूसरी बार आपको इस तर्क को एक अलग पृष्ठ पर चाहिए, तो फिल्टर या निर्देश रखने के लिए न्यूनतम अतिरिक्त समय निवेश का भुगतान किया जाएगा। और आप इसे रूट स्कोप पर रोक सकते हैं, लेकिन यह एक और कोडमेल है जिसे आपको अनदेखा करना चाहिए। 1012 ऐसे समाधान के लिए – Mattygabe

25

manzapanza के एक नहीं है nswer केवल तभी काम करता है जब सेकंड 86400 (1 दिन) से कम हो। दिनांक वस्तु पूरी तरह से शून्य होने की आवश्यकता है। साथ ही, वास्तविक दिनांक वस्तु को वापस करना बेहतर होगा ताकि कोणीय को इसे फिर से बनाना पड़े।

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

1 दिन 10 सेकंड दिखाएं। – mpz

+0

यहां "ऐप" क्या है? 'app.filter' में, हमें फ़िल्टर को बिल्कुल कहां रखना चाहिए? –

+1

@DanyY ऐप आपका मॉड्यूल है: var app = angular.module ('myapp', []); – makman99

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

इच्छा उत्पादन: 02:04:14

7

इस प्रयास करें:

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

एचटीएमएल:

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

मुझे यह काम करने के लिए '[] 'ड्रॉप करने की आवश्यकता है और 1000 से सेकंड विभाजित करने के रूप में मैं मिलीसेकंड –

+0

धन्यवाद से निपट रहा था। बस संशोधित – endru

संबंधित मुद्दे