सेकंड को HH में कैसे बदलें: mm: ss in moment.js


94

मैं सेकंड को कैसे परिवर्तित कर सकता हूं HH:mm:ss?

फिलहाल मैं नीचे फ़ंक्शन का उपयोग कर रहा हूं

render: function (data){
     return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}

यह क्रोम पर काम करता है, लेकिन 12 सेकंड के लिए फ़ायरफ़ॉक्स में 01:00:12 मुझे क्रॉस ब्राउज़र संगतता के लिए क्षण.जेएस का उपयोग करना होगा

मैंने यह कोशिश की लेकिन काम नहीं करता

render: function (data){
         return moment(data).format('HH:mm:ss');
}

मैं क्या गलत कर रहा हूं?

संपादित करें

मैं क्षण के बिना एक समाधान खोजने में कामयाब रहा। जेएस जो इस प्रकार है

return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

फिर भी उत्सुक हूं कि मैं इसे क्षण में कैसे कर सकता हूं



@mplungjan इस बात का खेद है कि मैंने उस पोस्ट को पहले ही पढ़ लिया है। मुझे लाखों पंक्ति के साथ एक तालिका प्रस्तुत करने की आवश्यकता है और समाधान बहुत धीमा है। दूसरा जवाब बिल्कुल वही है जो मैंने अपने प्रश्न में लिखा है, लेकिन मुझे फ़ायरफ़ॉक्स में समस्याएँ देता है
QGA

2
@QuentinTanioartino तो 4 तुच्छ गणित ऑपरेटर लाखों तत्वों के लिए DOM को म्यूट करने के कार्य के लिए एक समस्या है? क्या आप सुनिश्चित हैं कि आप प्रदर्शन समस्या को सही ढंग से समझ रहे हैं?
झर्क

@zerkms अच्छी तरह से मुझे पता है कि मेरे DAO वर्गों को पहले से परिवर्तित डेटा की सेवा के लिए फिर से लिखना होगा। यह एक ऐसा मुद्दा है जिससे मैं अवगत हूं। कहा कि मैं अपने पहले प्रयास के वर्तमान प्रदर्शनों से काफी खुश हूं लेकिन जब मेरे पास रूपांतरण के लिए 5 गणित संचालन होते हैं जो सिस्टम को थोड़ा धीमा कर देते हैं। हां, मैं आपसे सहमत हूं कि यह सिर्फ एक त्वरित मंदिर समाधान है
QGA

@QuentinTanioartino "जो सिस्टम को थोड़ा धीमा कर देता है" --- "थोड़ा" आप प्रदर्शन के बारे में कैसे कारण नहीं है। क्या यह अड़चन है? क्या यह अड़चन साबित हो रहा है? यदि नहीं - क्या आप इस बहुत ऑपरेशन का अनुकूलन करने के लिए ड्राइव करते हैं?
zerkms

जवाबों:


80

से इस पोस्ट मैं छलांग मुद्दों से बचने के लिए इस की कोशिश करेंगे

moment("2015-01-01").startOf('day')
    .seconds(s)
    .format('H:mm:ss');

मैंने jsPerf नहीं चलाया था, लेकिन मुझे लगता है कि यह नई तारीख वस्तुओं को एक मिलियन गुना बनाने की तुलना में तेज़ है

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
  // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}


2
बहुत बहुत धन्यवाद, बहुत ही चतुर समाधान
QGA

1
दूसरा वाला, यह बहुत तेज़ है
QGA

1
आप इसे दूसरे उदाहरण में कर सकते हैं: वापसी [घंटे, मिनट, सेकंड] .filter (t => t) (पैड) .join (":")
ओन्नो फेबर

@OnnoFaber आपको क्या लगता है सबसे तेज़ है? संघ या एक फिल्टर प्लस एक नक्शा? हम यह भी कर सकते हैं`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
mplungjan

पहले के सभी उत्तरों से, सबसे सरल है mplungjan में से एक , लेकिन इसमें एक त्रुटि है जो यादृच्छिक संख्या दिखाती है यदि मूल्य में मिलीसेकंड है (उदाहरण के लिए: 17.3 s)। उनके कोड के आधार पर, मैं निम्नलिखित प्रस्ताव करता हूं: फ़ंक्शन पैड (संख्या) {वापसी ("0" + संख्या) .llice (-2); } / ** * @ ग्रेट + स्ट्रिंग} * / डिफॉल्ट डिफॉल्ट फंक्शन रेंडर यूजरटाइम (सेकंड) {लेट मिनट्स = मैथ.फ्लोर (सेकंड्स / 60); const outputSecs = Math.round (सेकंड% 60); let hours = Math.floor (मिनट / 60); const outputMinutes = Math.round (मिनट 60%); वापसी `$ {पैड (घंटे)}: $ {पैड (आउटपुटमी
अल्बर्टो सोतो

98

यह एक और पोस्ट से संदर्भित उत्तर mplungjan के समान है, लेकिन अधिक संक्षिप्त:

const secs = 456;

const formatted = moment.utc(secs*1000).format('HH:mm:ss');

document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

यह एक ही कैवियट से ग्रस्त है, उदाहरण के लिए यदि सेकंड एक दिन (86400) से अधिक है, तो आपको वह नहीं मिलेगा जो आप उम्मीद करते हैं।


1
धन्यवाद, मुझे लगता है कि यह एक बहुत ही सामान्य आवश्यकता है, पल के लिए एक पुल अनुरोध खोलें। क्या उन्हें इसे शामिल करना चाहिए।
मॉरिस एस

धन्यवाद @ सोफी। कुछ स्थानों का उल्लेख utc () है, जो वास्तव में मेरे मामले में आवश्यक था।
pm

25

आप पल-अवधि-प्रारूप प्लगइन का उपयोग कर सकते हैं :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

इस फिडल को भी देखें

अद्यतन: 60-सेकंड के उपयोग से कम मूल्यों के लिए ट्रिमिंग से बचने के लिए { trim: false }:

var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"

एक व्यापार बंद है जिसे आपके उत्तर और @ सोफी के उत्तर के साथ देखने की आवश्यकता है। जबकि तकनीकी रूप से आपका समाधान hh: mm: ss के रूप में "टाइम" की अवधि प्रदर्शित करेगा, इसके लिए अतिरिक्त प्लगइन की आवश्यकता होती है। सोफी वर्तमान समय में एचएच: मिमी: एसएस के रूप में एक "दिनांक" है। यदि आपने सोफी से "utc" हटा दिया है, तो यह गलत जानकारी दे सकता है क्योंकि यह तारीख के रूप में युग का उपयोग करता है और वर्तमान समय में नहीं। दोनों जवाब काम करते हैं। बस कुछ सोचने और समझने के लिए।
माइकल

यहाँ CDN और whatnot का उपयोग करने से बढ़ी हुई विलंबता को जोड़ा जा सकता है, यह आमतौर पर "एक अन्य पुस्तकालय सहित" को नकारात्मक ट्रेडऑफ़ बनाम कोड को लागू करने के रूप में सोचना खतरनाक है। यह एक ऐसा जाल है जिसे मैं कई डेवलपर्स को गिरते हुए देखता हूं और अंततः कम रखरखाव योग्य कोड के साथ हवा देता हूं।
सायटिनस

किसी कारणवश अगर सेकंड <60 तो यह बस
अनियंत्रित

@DanielLizik, केवल {trim: false} जोड़ें। जैसे: अवधि.रूपात ("hh: mm: ss", {trim: false});
ओलेक्सी काचिन्स्की 12

16
var seconds = 2000 ; // or "2000"
seconds = parseInt(seconds) //because moment js dont know to handle number in string format
var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();

1

कैसे सही ढंग से क्षणों का उपयोग करें? | कोड्स में moment.duration () का उपयोग करें

सबसे पहले, आप आयात करने की आवश्यकता momentहै और moment-duration-format

import moment from 'moment';
import 'moment-duration-format';

फिर, अवधि फ़ंक्शन का उपयोग करें। हमें उपरोक्त उदाहरण लागू करें: 28800 = 8 पूर्वाह्न।

moment.duration(28800, "seconds").format("h:mm a");

.Well, आपको ऊपर प्रकार की त्रुटि नहीं है। 🤔क्या आपको सुबह 8:00 बजे एक सही मूल्य मिलेगा? नहीं… आपको मिलने वाला मान 8:00 है। माना जाता है कि Moment.js प्रारूप काम नहीं कर रहा है।

Onds समाधान सेकंड को मिलीसेकंड में बदलने और यूटीसी समय का उपयोग करने के लिए है।

moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')

ठीक है अब हम 8:00 बजे मिलते हैं। यदि आप अभिन्न समय के लिए 8:00 बजे के बजाय 8 बजे चाहते हैं, तो हमें RegExp करने की आवश्यकता है

const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a');
time.replace(/:00/g, '')

1

24 बजे तक। जैसा कि Duration.formatक्षण -२.२३.० के साथ घटाया जाता है

const seconds = 123;
moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');

1

स्ट्रिंग प्रारूप में सेकंड (संख्या) बदलने के लिए मेरा समाधान (उदाहरण के लिए: 'mm: ss'):

const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');

उदाहरण के लिए 'S' के बजाय अपने सेकंड लिखें । और जहां जरूरत हो बस 'फॉर्मैटेड सेकंड्स' का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.