ฉันจะใช้รูปแบบ () ในช่วงเวลา moment.js ได้อย่างไร


211

มีวิธีใดบ้างที่ฉันสามารถใช้วิธีmoment.js formatกับวัตถุระยะเวลา ฉันไม่พบที่ใดก็ได้ในเอกสารและไม่เห็นว่าเป็นคุณลักษณะของวัตถุระยะเวลา

ฉันต้องการทำสิ่งที่ชอบ:

var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')

นอกจากนี้หากมีห้องสมุดอื่นใดที่สามารถรองรับฟังก์ชั่นประเภทนี้ได้อย่างง่ายดายฉันจะสนใจเรื่องคำแนะนำอีกครั้ง

ขอบคุณ!


5
moment.utc (duration.asMilliseconds ()) รูปแบบ ( 'HH: mm: ss');. - ระยะเวลาเป็นเวกเตอร์ โดยการวางหางไว้บนจุดเริ่มต้นคุณสามารถใช้การจัดรูปแบบวันที่เพื่อรับ hh: mm: ss
พอลวิลเลียมส์

ขณะนี้. moment.utc (moment.duration (23, 'seconds'). asMilliseconds ()). format ('hh: mm: ss') => "12:00:23" ทำงานได้ไม่ดี
goldenratio

ฉันพบปัญหาแล้วHH:mm:ssจะ00:00:23ยกตัวอย่างก่อนหน้านี้ ดังนั้นเพียงท่อที่ผิดในส่วนชั่วโมง
goldenratio

คำตอบ:


55

เรากำลังมองหาการเพิ่มการจัดรูปแบบบางอย่างให้กับระยะเวลาใน moment.js ดูhttps://github.com/timrwood/moment/issues/463

ห้องสมุดอื่น ๆ ที่อาจช่วยได้คือhttp://countdownjs.org/และhttps://github.com/icambron/twix.js


4
ฉันรอคอยที่จะจัดรูปแบบระยะเวลาด้วย ดูนับถอยหลังตอนนี้ แต่ twix ดูเหมือนว่าจะทำการจัดรูปแบบ "สมาร์ท" ไม่ใช่การปรับแต่งมากนัก
mpen

2
ในขณะที่ Twix ทำงานอย่างหนักเพื่อทำรูปแบบสมาร์ทมีจำนวนมากของตัวเลือกการจัดรูปแบบที่เหมาะสมในการลงราชสกุลที่เกี่ยวข้อง: github.com/icambron/twix.js/wiki/Formatting คำเตือน: ฉันเป็นผู้เขียน twix

3
Countdown.js นั้นยอดเยี่ยมมากและผู้เขียนก็มีประโยชน์มาก (เขาเพิ่งเปิดตัว2 เวอร์ชั่นในวันเดียวกันเนื่องจากข้อเสนอแนะที่ฉันทำ)
Ohad Schneider

5
ฉันลงคะแนนเพราะปัญหา GitHub ที่เชื่อมโยงในคำตอบนี้เป็นเพียงความคิดเห็นที่ไม่สิ้นสุดความปรารถนาและการพูดจาโผงผางที่ไม่มีที่ใดปัญหายังคงเปิดหลังจาก 4 ปีไม่มีอะไรที่เป็นประโยชน์
bmaggi

29
ทำไมมันไม่เหมือนกันกับ. format อื่น ๆ ที่ใช้ในห้องสมุด? นี่คือความวิกลจริต 5 ปีแล้วและยังไม่เสร็จ? จริงๆ?!
kristopolous

164
// set up
let start = moment("2018-05-16 12:00:00"); // some random moment in time (in ms)
let end = moment("2018-05-16 12:22:00"); // some random moment after start (in ms)
let diff = end.diff(start);

// execution
let f = moment.utc(diff).format("HH:mm:ss.SSS");
alert(f);

ดูที่ JSFiddle


3
วิธีการที่ดี แม้ว่ามันจะไม่ทำงานถ้าผมต้องการที่จะแสดงผลวันที่: DDD HH:mm:ss.SSS(ในกรณีที่DDDเป็นวันของปี) แสดงเมื่อฉันต้องการ1 0มีการแก้ไขด่วน ๆ ไหม?
Andrew Mao

1
ไม่มีวิธีง่ายๆ ฉันทำjsfiddle.net/fhdd8/14นี้ ซึ่งอาจเป็นสิ่งที่คุณทำ แต่ฉันไม่คิดว่าช่วงเวลาจะมีอะไรที่ทำสิ่งนี้ได้นอกกรอบ
David Glass

49
มันไม่มีเหตุผลใดที่จะแสดง 10 ล้านล้านมิลลิวินาทีในขณะที่ mm: ss
Pier-Luc Gendreau

28
สิ่งนี้ใช้ไม่ได้ใน 24 ชั่วโมง (เช่นถ้าฉันต้องการแสดง 117 ชั่วโมง) ทางออกที่ดีเป็นอย่างอื่น!
Phil

1
@Phil คุณสามารถใช้ "D" หรือ "DD" หากคุณต้องการแสดงวัน
Vinay

71

แปลงระยะเวลาเป็นมิลลิวินาทีและจากนั้นเป็นโมเมนต์:

moment.utc(duration.as('milliseconds')).format('HH:mm:ss')

14
ดังนั้นสิ่งนี้จะไม่ทำงานหากระยะเวลาของคุณนานกว่า 24 ชั่วโมง .. 24 ชั่วโมงกำลังรีเซ็ตเป็น 0h
S. Robijns

4
@ S.Robijns สังเกตที่มีประโยชน์ แต่เพียงจะเน้นสำหรับคนอื่น ๆ - นี้เป็น.format('HH:mm:ss')พฤติกรรมที่คาดหวังของ ดูเอกสาร
davnicwil

1
นี่คือคำตอบที่ดีที่สุด!
Magico

44

ใช้ปลั๊กอินนี้Moment รูปแบบระยะเวลา

ตัวอย่าง:

moment.duration(123, "minutes").format("h:mm");

1
การจัดรูปแบบนั้นทำงานไม่ถูกต้องด้านระยะเวลานั้นดี แต่ถ้าฉันระบุhh:mm:mmและมีเวลาเพียง 10 วินาทีที่จะแสดง10แทน00:00:10(แม้จะมีการ forcelength on) หากไม่ได้จัดรูปแบบ ... มันควรจะเรียกว่าอะไรก็ตามรูปแบบควรเป็น มาตรฐาน
Piotr Kula

9
@ppumkin ฉันรู้ว่านี่เก่า แต่ถ้าคุณระบุ{ trim: false }มันจะหยุดพฤติกรรมนั้น
Carlos Martinez

3
นี่คือสิ่งที่ฉันชอบที่จะใช้: สมมติว่าคุณมีระยะเวลาเช่นเดียวกับที่const duration = moment.duration(value, 'seconds');ฉันสามารถจัดรูปแบบโดยใช้: moment.utc(duration.as('milliseconds')).format('HH:mm:ss').toString();
Evgeny Bobkin

1
@EvgenyBobkin ที่จะไม่ทำงานหากระยะเวลาของคุณนานกว่าหนึ่งวันห้องสมุดจะจัดการกับมัน
reggaeguitar

16

ใช้รหัสบรรทัดนี้:

moment.utc(moment.duration(4500, "seconds").asMilliseconds()).format("HH:mm:ss")

8
หากระยะเวลา>> 86400 '' (เช่น 24 ชั่วโมง) สิ่งนี้จะไม่ทำงาน
Lorenzo Tassone

มันเหมือนกันใน excel มันจะเกลือกกลิ้งเวลา 24 ชั่วโมง นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมหากคุณตระหนักถึงข้อ จำกัด 24 ชั่วโมง
Eman4real

15
var diff = moment(end).unix() - moment(start).unix();
moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");

1
โดยทั่วไปแล้วคำตอบมีประโยชน์มากขึ้นหากพวกเขามีคำอธิบายว่ารหัสนี้มีจุดประสงค์เพื่ออะไรและเหตุใดจึงแก้ปัญหาได้โดยไม่ต้องแนะนำผู้อื่น (โพสต์นี้มีการตั้งค่าสถานะโดยผู้ใช้อย่างน้อยหนึ่งรายน่าจะเป็นเพราะพวกเขาคิดว่าคำตอบที่ไม่มีคำอธิบายควรถูกลบ)
Nathan Tuggy

1
ไม่มีคำอธิบายหรือไม่นี่คือสิ่งที่ทำเพื่อฉัน ขอบคุณ :)
dmmd

คำอธิบายไม่จำเป็น Moment.js doc สามารถแสดงให้เห็นว่าการแก้ไขปัญหานี้ประสบความสำเร็จได้อย่างไร
coffekid

2
ไร้ประโยชน์ เช่นเดียวกับคำตอบอื่น ๆ ส่วนใหญ่ในคำถามนี้ส่งคืนชั่วโมงบางส่วนในระยะเวลาไม่รวมชั่วโมง เช่นส่งคืน 12:00 สำหรับช่วงเวลา moment.duration ({วัน: 2, ชั่วโมง: 12})
Neutrino

1
moment.duration (diff) .asMilliseconds () มากเกินไป คุณสามารถใช้ diff ได้แล้วมันมีหน่วยเป็นมิลลิวินาที
kristopolous

12

สถานการณ์ที่ดีที่สุดสำหรับกรณีการใช้งานเฉพาะของฉันคือ:

var duration = moment.duration("09:30"),
    formatted = moment.utc(duration.asMilliseconds()).format("HH:mm");

สิ่งนี้ปรับปรุงจากคำตอบของ @ Wilson เนื่องจากไม่สามารถเข้าถึงคุณสมบัติภายในส่วนตัว _data


ขอบคุณ @TaeKwonJoe
Kamlesh

11

คุณไม่ต้องการรูปแบบ ใช้ระยะเวลาเช่นนี้:

const duration = moment.duration(83, 'seconds');
console.log(duration.minutes() + ':' +duration.seconds());
// output: 1:23

ฉันพบโซลูชันนี้ที่นี่: https://github.com/moment/moment/issues/463

แก้ไข:

และด้วยการขยายเป็นวินาที, นาทีและชั่วโมง:

const withPadding = (duration) => {
    if (duration.asDays() > 0) {
        return 'at least one day';
    } else {
        return [
            ('0' + duration.hours()).slice(-2),
            ('0' + duration.minutes()).slice(-2),
            ('0' + duration.seconds()).slice(-2),
        ].join(':')
    }
}

withPadding(moment.duration(83, 'seconds'))
// 00:01:23

withPadding(moment.duration(6048000, 'seconds'))
// at least one day

2
สิ่งนี้จะไม่รวมศูนย์นำหน้าถ้า Duration.seconds () น้อยกว่า 10 ถึงแม้ว่า ...
carpiediem

จะเกิดอะไรขึ้นถ้าคุณมีเวลามากกว่าหนึ่งวินาที เป็นเรื่องปกติไหมที่คุณมีมากกว่า 60 วินาที?
shaedrich

เลขศูนย์นำหน้าได้ แต่duration = moment.duration(7200, 'seconds'); withPadding(duration);จะพูดว่า "00:00"
Shaedrich

@ Shaedrich ฉันปรับปรุงคำตอบอีกครั้งเพื่อรวมชั่วโมง หากคุณต้องการวัน, สัปดาห์, aso เช่นกันคุณสามารถเพิ่มพวกเขาลงในอาร์เรย์
ni-ko-o-kin

1
if (duration.asDays() > 0) { return 'at least one day';- ฉันอ่านถูกไหม?
สตีเฟ่นพอล

8

ฉันใช้:

var duration = moment.duration("09:30");
var str = moment(duration._data).format("HH:mm");

และฉันได้รับ "09:30" ใน var str


ที่ดี! เพียงแค่นี้ก็ทำงาน ... ว่าในโลกที่คุณไม่ได้เกิดขึ้นกับนี้ :)
vanthome

4
หลีกเลี่ยงการแก้ปัญหา_dataนี้เป็นทรัพย์สินภายในและอาจเปลี่ยนแปลงได้โดยไม่มีการเตือนล่วงหน้า
Druska

1
น่าเสียดายที่มันไม่ทำงานตามที่คาดไว้: moment(moment.duration(1200000)._data).format('hh:mm:ss')จะคืน 12:20 แทน 00:20
แอนนา R

2
@AnnaR hอยู่ในช่วง 1-12 ดังนั้นจึงค่อนข้างคาดหวัง ใช้Hแทนโทเค็นเอกสาร - ชั่วโมง
barbsan

สิ่งนี้ไม่ถูกต้องไม่เพียง แต่คุณไม่สนใจ DAYS ดังนั้น 1 วันและ 1 ชั่วโมงจะปรากฏเป็น 01:00 นอกจากนี้คุณจะสมบูรณ์ละเว้นโซนเวลาเป็นทางออกที่ดีขึ้น แต่ยังไม่ได้เป็นที่สมบูรณ์แบบหนึ่งที่จะเป็น moment.utc(...).format("HH:mm");
กิล Epshtain

5

ถ้าต่างกันสักครู่

var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);

ดูเหมือนว่าจะไม่น่าเชื่อถือในหน้าของเขตเวลาและเช่นนี้ คุณใช้สิ่งนี้ในการผลิตหรือไม่?
Keith

คำถามไม่ได้กล่าวถึงเขตเวลา
Kieran

3
ทุกคนอาศัยอยู่ในเขตเวลา ช่วงเวลา (0) ลงทะเบียนเป็น 12:00 AM ทุกครั้งหรือไม่
Keith

ฉันแค่ถามว่ารหัสในคำตอบของคุณใช้ได้หรือไม่เพราะฉันไม่เชื่อ ฉันเขียนโค้ดจำนวนมากที่ทำงานกับวันที่ในภาษาการเขียนโปรแกรมจำนวนมาก จากประสบการณ์ของฉันดูเหมือนว่ารหัสของคุณจะทำงานในบางเขตเวลาเท่านั้น แต่ฉันถามเพราะบางทีมีบางสิ่งที่ฉันไม่รู้เกี่ยวกับวิธีที่ Javascript แสดงวันที่ใกล้กับยุค Unix
Keith

1
บรรทัดที่สองจะสร้างช่วงเวลาตั้งแต่เริ่มต้น (1970) สิ่งนี้จะไม่ทำ
Kumarharsh

5

หากคุณยินดีที่จะใช้ห้องสมุด javascript ที่แตกต่างกันnumeral.jsสามารถจัดรูปแบบวินาทีดังต่อไปนี้ (ตัวอย่างเป็นเวลา 1,000 วินาที):

var string = numeral(1000).format('00:00');
// '00:16:40'

ทางไปแน่นอน อย่างที่คาดไว้.
Piotr Kula

4

ฉันใช้ฟังก์ชั่นรูปแบบคลาสสิกในกรณีเหล่านี้:

var diff = moment(end).unix() - moment(start).unix();

//use unix function instead of difference
moment.unix(diff).format('hh:mm:ss')

นี่คือแฮ็กเนื่องจากเวลาต่างกันจะถือว่าเป็นช่วงเวลามาตรฐานช่วงเวลาเริ่มต้น แต่ไม่สำคัญกับเป้าหมายของเราและคุณไม่ต้องการปลั๊กอินใด ๆ


4

หากต้องแสดงชั่วโมงทั้งหมด (มากกว่า 24) และหากไม่ต้องการ '0' ก่อนเวลาทำการการจัดรูปแบบสามารถทำได้ด้วยรหัสย่อ:

Math.floor(duration.as('h')) + moment.utc(duration.as('ms')).format(':mm:ss')

4

ตามคำตอบของ ni-ko-o-kin :

meassurements = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"];
withPadding = (duration) => {
    var step = null;
    return meassurements.map((m) => duration[m]()).filter((n,i,a) => {
        var nonEmpty = Boolean(n);
        if (nonEmpty || step || i >= a.length - 2) {
            step = true;
        }
        return step;
    }).map((n) => ('0' + n).slice(-2)).join(':')
}

duration1 = moment.duration(1, 'seconds');
duration2 = moment.duration(7200, 'seconds');
duration3 = moment.duration(604800, 'seconds');

withPadding(duration1); // 00:01
withPadding(duration2); // 02:00:00
withPadding(duration3); // 01:07:00:00:00

ฉันไม่คิดว่ามันจะอ่านได้มาก คุณต้องการแก้ไขปัญหาอะไรที่นี่ usecase ของคุณคืออะไร?
ni-ko-o-kin

ฉันปรับปรุงคำตอบอีกครั้งเพื่อจัดการกับมากกว่าหนึ่งวัน มันใช้งานได้ดีสำหรับกรณีการใช้งานของฉัน
ni-ko-o-kin

2
ปัญหาคือว่าในกรณีส่วนใหญ่การแก้ปัญหาของคุณไม่เหมาะเพราะมันมีศูนย์นำหน้ามากเกินไป ใครอยากได้กลับมา "00: 00: 00: 00: 01" โซลูชันของฉันคือ "ปรับขนาดได้" และเพิ่มค่าศูนย์นำเท่าที่จำเป็น
Shaedrich

ทำงานได้อย่างสมบูรณ์แบบ เอาต์พุตที่ง่ายมาก หากไม่มีวันจะไม่มีศูนย์สำหรับแสดงวันเป็นต้น
Hasan Sefa Ozalp

3

เพื่อจัดรูปแบบช่วงเวลาขณะที่สตริง

var duration = moment.duration(86400000); //value in milliseconds
var hours = duration.hours();
var minutes = duration.minutes();
var seconds = duration.seconds();
var milliseconds = duration.milliseconds();

var date = moment().hours(hours).minutes(minutes).seconds(seconds).millisecond(milliseconds);
if (is12hr){
    return date.format("hh:mm:ss a");
}else{
    return date.format("HH:mm:ss");
}

3

ถ้าคุณใช้มุมเพิ่มตัวกรองของคุณ:

.filter('durationFormat', function () {
    return function (value) {
        var days = Math.floor(value/86400000);
        value = value%86400000;
        var hours = Math.floor(value/3600000);
        value = value%3600000;
        var minutes = Math.floor(value/60000);
        value = value%60000;
        var seconds = Math.floor(value/1000);
        return (days? days + ' days ': '') + (hours? hours + ' hours ': '') + (minutes? minutes + ' minutes ': '') + (seconds? seconds + ' seconds ': '')
    }
})

ตัวอย่างการใช้งาน

<div> {{diff | durationFormat}} </div>

ดีมากจริงๆ ฉันกำลังมองหา 'รูปแบบสวย' เช่นนี้ ขอบคุณ!
riketscience

3

โซลูชันของฉันที่ไม่เกี่ยวข้องกับห้องสมุดอื่น ๆ และใช้ได้กับ diff> 24 ชั่วโมง

var momentInSeconds = moment.duration(n,'seconds')
console.log(("0" + Math.floor(momentInSeconds.asHours())).slice(-2) + ':' + ("0" + momentInSeconds.minutes()).slice(-2) + ':' + ("0" + momentInSeconds.seconds()).slice(-2))

1

จาวาสคริปต์ดั้งเดิมมีวิธีการอย่างไร

var formatTime = function(integer) {
    if(integer < 10) {
        return "0" + integer; 
    } else {
        return integer;
    }
}

function getDuration(ms) {
    var s1 = Math.floor(ms/1000);
    var s2 = s1%60;
    var m1 = Math.floor(s1/60);
    var m2 = m1%60;
    var h1 = Math.floor(m1/60);
    var string = formatTime(h1) +":" + formatTime(m2) + ":" + formatTime(s2);
    return string;
}

1

ใช้ช่วงเวลาระยะเวลารูปแบบ

กรอบงานลูกค้า (เช่นตอบกลับ)

import moment from 'moment';
import momentDurationFormatSetup from 'moment-duration-format';
momentDurationFormatSetup(moment);

const breakLengthInMinutes = moment.duration(breakLengthInSeconds, 's').format('m');

เซิร์ฟเวอร์ (node.js)

const moment = require("moment-timezone");
const momentDurationFormatSetup = require("moment-duration-format");

momentDurationFormatSetup(moment);

const breakLengthInMinutes = moment.duration(breakLengthInSeconds, 's').format('m');

0
const duration = moment.duration(62, 'hours');
const n = 24 * 60 * 60 * 1000;
const days = Math.floor(duration / n);
const str = moment.utc(duration % n).format('H [h] mm [min] ss [s]');
console.log(`${days > 0 ? `${days} ${days == 1 ? 'day' : 'days'} ` : ''}${str}`);

พิมพ์:

2 วัน 14 ชั่วโมง 00 นาที 00 วินาที


0
import * as moment from 'moment'
var sleep = require('sleep-promise');

(async function () {
    var t1 = new Date().getTime();
    await sleep(1000); 
    var t2 = new Date().getTime();
    var dur = moment.duration(t2-t1); 
    console.log(`${dur.hours()}h:${dur.minutes()}m:${dur.seconds()}s`);
})();
0h:0m:1s


0

สามารถใช้เพื่อรับอักขระสองตัวแรกเป็นชั่วโมงและสองตัวสุดท้ายเป็นนาที ตรรกะเดียวกันอาจใช้กับวินาที

/**
     * PT1H30M -> 0130
     * @param {ISO String} isoString
     * @return {string} absolute 4 digit number HH:mm
     */

    const parseIsoToAbsolute = (isoString) => {
    
      const durations = moment.duration(isoString).as('seconds');
      const momentInSeconds = moment.duration(durations, 'seconds');
    
      let hours = momentInSeconds.asHours().toString().length < 2
        ? momentInSeconds.asHours().toString().padStart(2, '0') : momentInSeconds.asHours().toString();
        
      if (!Number.isInteger(Number(hours))) hours = '0'+ Math.floor(hours);
    
      const minutes = momentInSeconds.minutes().toString().length < 2
        ? momentInSeconds.minutes().toString().padEnd(2, '0') : momentInSeconds.minutes().toString();
    
      const absolute = hours + minutes;
      return absolute;
    };
    
    console.log(parseIsoToAbsolute('PT1H30M'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


หากคุณแทรกรหัสเป็นข้อมูลโค้ดคุณจะสามารถทดสอบวิธีการและแสดงผลลัพธ์ไปยังคอนโซล
DJDaveMark

แน่นอน! เพิ่งอัปเดตด้วยข้อมูลโค้ดสำหรับการทดสอบอย่างรวดเร็ว
José Luis Raffalli

0

moment.duration(x).format()เลิกใช้แล้ว คุณสามารถใช้moment.utc(4366589).format("HH:mm:ss")เพื่อรับการตอบสนองที่ต้องการ

console.log(moment.utc(4366589).format("HH:mm:ss"))
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


0

วิธีการใช้ช่วงเวลา moment.js อย่างถูกต้อง? | ใช้ moment.duration () ในรหัส

แรกที่คุณจำเป็นต้องนำเข้าและmomentmoment-duration-format

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

จากนั้นใช้ฟังก์ชั่นระยะเวลา ให้เราใช้ตัวอย่างด้านบน: 28800 = 8 am

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

🎉ดีคุณไม่มีข้อผิดพลาดประเภทด้านบน you คุณได้รับสิ่งที่คุ้มค่า 8:00 น. ไม่…ค่าที่คุณได้รับคือ 8:00 น. รูปแบบ Moment.js ไม่ทำงานอย่างที่ควรจะเป็น

solution วิธีแก้ไขคือแปลงวินาทีเป็นมิลลิวินาทีและใช้เวลา UTC

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

ทั้งหมดที่เราได้รับ 8:00 น. ตอนนี้ หากคุณต้องการเวลา 8 โมงเช้าแทนที่จะเป็นเวลา 8:00 น. เราจะต้องใช้ RegExp

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

0

ฉันต้องทำสิ่งนี้เพื่อทำงานตามความต้องการในการแสดงชั่วโมงในรูปแบบนี้ ตอนแรกฉันลองทำ

moment.utc(totalMilliseconds).format("HH:mm:ss")

อย่างไรก็ตามสิ่งที่เกิน 24 ชั่วโมงและชั่วโมงที่รีเซ็ตเป็น 0 แต่นาทีและวินาทีมีความแม่นยำ ดังนั้นฉันจึงใช้เฉพาะส่วนนั้นเป็นเวลานาทีและวินาที

var minutesSeconds = moment.utc(totalMilliseconds).format("mm:ss")

ตอนนี้สิ่งที่ฉันต้องการคือจำนวนชั่วโมงทั้งหมด

var hours = moment.duration(totalMilliseconds).asHours().toFixed()

และเพื่อให้ได้รูปแบบนั้นที่เราทุกคนต้องการ

var formatted = hours + ":" + minutesSeconds

ถ้าtotalMillisecondsเป็นนี้จะกลับมา894600000249:30:00

หวังว่าจะช่วย ฝากคำถามใด ๆ ในความคิดเห็น ;)


-1

ถ้าคุณใช้ Angular> 2 ฉันสร้าง Pipe โดย @ hai-alaluf answer

import {Pipe, PipeTransform} from "@angular/core";

@Pipe({
  name: "duration",
})

export class DurationPipe implements PipeTransform {

  public transform(value: any, args?: any): any {

    // secs to ms
    value = value * 1000;
    const days = Math.floor(value / 86400000);
    value = value % 86400000;
    const hours = Math.floor(value / 3600000);
    value = value % 3600000;
    const minutes = Math.floor(value / 60000);
    value = value % 60000;
    const seconds = Math.floor(value / 1000);
    return (days ? days + " days " : "") +
      (hours ? hours + " hours " : "") +
      (minutes ? minutes + " minutes " : "") +
      (seconds ? seconds + " seconds " : "") +
      (!days && !hours && !minutes && !seconds ? 0 : "");
  }
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.