使用Momentjs将毫秒转换为小时和分钟

时间:2014-04-08 13:18:05

标签: javascript momentjs

我是Momentjs的新手。我试图用它来将毫秒转换为小时和分钟。下面,x是毫秒

x = 433276000
var y = moment.duration(x, 'milliseconds').asHours;

有人可以帮忙吗?

13 个答案:

答案 0 :(得分:52)

我最终这样做了......

var x = 433276000
var tempTime = moment.duration(x);
var y = tempTime.hours() + tempTime.minutes();

答案 1 :(得分:29)

试试这个:

var x = 433276000
var d = moment.duration(x, 'milliseconds');
var hours = Math.floor(d.asHours());
var mins = Math.floor(d.asMinutes()) - hours * 60;
console.log("hours:" + hours + " mins:" + mins);

答案 2 :(得分:17)

使用moment-duration-format plugin

moment.duration(ms).format("h:mm")

答案 3 :(得分:12)

您可以使用moment.utc()从毫秒创建Moment.js日期。

var milliseconds = 1000;
moment.utc(milliseconds).format('HH:mm');

答案 4 :(得分:5)

有一种更简单的方法可以达到你想要的效果。

moment('2000-01-01 00:00:00').add(moment.duration(1000)).format('HH:mm:ss');

将输出此

00:00:01

我知道,这不是最高级的,但它是100%纯粹的时刻js。

编辑 :超过24小时不起作用

答案 5 :(得分:2)

这似乎不受支持per this SO。在this github issue之后,您可以使用moment-to-countdown plugin

但看起来你可能首先需要Countdown.js

countdown(0, 433276000, countdown.HOURS | countdown.MINUTES).toString();

请注意,这并没有考虑闰秒,也没有考虑到任何问题,因为它修复了Unix时代(所以它不是一个纯粹的时间间隔)。

答案 6 :(得分:2)

确实没有必要使用Moment进行此操作。

它可以写成一行:

var hours = Math.round((450616708 / 1000 / 60 / 60) * 100) / 100;

或作为功能:

function millisecondsToHours(ms){
  return Math.round((ms / 1000 / 60 / 60) * 100) / 100;
}

答案 7 :(得分:1)

在Moment.js持续时间内,如果您希望它超过24小时,您可以使用Math.trunc几个小时。 hh:mm:ss格式。

var seconds = moment.duration(value).seconds();
var minutes = moment.duration(value).minutes();
var hours = Math.trunc(moment.duration(value).asHours());

在此处查看:https://codepen.io/brickgale/pen/mWqKJv?editors=1011

答案 8 :(得分:1)

这是一个将其格式化为字符串的函数。

function ms_to_str(val) {

    let tempTime = moment.duration(val),
        timeObj = {
            years: tempTime.years(),
            months: tempTime.months(),
            days: tempTime.days(),
            hrs: tempTime.hours(),
            mins: tempTime.minutes(),
            secs: tempTime.seconds(),
            ms: tempTime.milliseconds()
        },

        timeArr = [];

    for (let k in timeObj) {
        if (Number(timeObj[k]) > 0) {
            timeArr.push(`${timeObj[k]} ${k}`)
        }
    }

    return timeArr.join(', ');
}

然后只需调用ms_to_str(2443253)即可返回40 mins, 43 secs, 253 ms

如果不需要显示毫秒,只需在ms: tempTime.milliseconds().toString().padStart(3, '0')行中注释掉。

答案 9 :(得分:0)

Momentjs本身不支持持续时间,为此,我们需要一个插件moment-duration-format

要使用此插件,请按照以下步骤操作(适用于React-js)

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

var time = moment.duration(value,unit).format('hh:mm:ss',{trim:false})

注意:我已经使用{trim:false}作为额外的参数,因此一开始它不会删掉额外的0。如果您希望使用“ 11:30”而不是“ 00:11:30”,则可以忽略它。

答案 10 :(得分:0)

function durationAsString(ms, maxPrecission = 3) {
    const duration = moment.duration(ms)

    const items = []
    items.push({ timeUnit: 'd', value: Math.floor(duration.asDays()) })
    items.push({ timeUnit: 'h', value: duration.hours() })
    items.push({ timeUnit: 'm', value: duration.minutes() })
    items.push({ timeUnit: 's', value: duration.seconds() })

    const formattedItems = items.reduce((accumulator, { value, timeUnit }) => {
        if (accumulator.length >= maxPrecission || (accumulator.length === 0 && value === 0)) {
            return accumulator
        }

        accumulator.push(`${value}${timeUnit}`)
        return accumulator
    }, [])

    return formattedItems.length !== 0 ? formattedItems.join(' ') : '-'
}

允许您设置最大精度并且不会显示无关紧要的值。 示例:

durationAsString(0) 将返回 -

durationAsString(10000) 将返回 10s

durationAsString(100000) 将返回 1m 40s

durationAsString(10000000) 将返回 2h 46m 40s

durationAsString(100000000) 将返回 1d 3h 46m

durationAsString(100000000, 4) 将返回 1d 3h 46m 40s

答案 11 :(得分:-1)

时刻(' 2000-01-01 00:00:00')。毫秒(XXXXXX)。格式(" HH:mm:ss")

答案 12 :(得分:-2)

非力矩代码



var timeinmilli  = 433276000;
var milliseconds = timeinmilli%1000;
var seconds     = parseInt(timeinmilli=timeinmilli/1000)%60;
var minutes     = parseInt(timeinmilli=timeinmilli/60)%60;
var hours       = parseInt(timeinmilli=timeinmilli/60)%24;
var days        =  parseInt(timeinmilli=timeinmilli/24);

document.body.innerHTML = [days, hours, minutes, seconds, milliseconds].join(":");