You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知原生JS可实现秒数转时长,能否用date-fns将1807秒转为30:07?

使用date-fns格式化秒数为「MM:SS」或「总分钟数:SS」格式?

当然可以用date-fns搞定这个需求!根据你是否需要处理超过1小时的时长(比如7265秒要显示成121:05而不是01:05),有两种简洁的实现方式:


场景1:时长不超过1小时,或需按小时/分钟拆分显示

如果你的秒数不会超过3600(1小时),或者希望超过1小时时按「小时:分钟:秒」拆分,那么可以用intervalToDuration + formatDuration组合,这是date-fns专门为时长格式化设计的API:

import { intervalToDuration, formatDuration } from 'date-fns';

// 你的目标秒数
const targetSeconds = 1807;

// 把秒数转成duration对象(注意要转成毫秒)
const duration = intervalToDuration({ 
  start: 0, 
  end: targetSeconds * 1000 
});

// 格式化指定的时长单位,用冒号分隔
const formattedTime = formatDuration(duration, {
  format: ['minutes', 'seconds'],
  delimiter: ':'
});

console.log(formattedTime); // 输出 "30:07"

如果输入的是7265秒,这个方法会输出2:01:05(对应2小时1分5秒),适合需要按自然时间单位拆分的场景。


场景2:无论时长多久,都显示「总分钟数:秒数」

如果不管时长多长,都要把所有秒数换算成总分钟数(比如7265秒要显示121:05),可以结合Math计算和date-fns的padStart方法来补零,比原生自己写补零逻辑更简洁:

import { padStart } from 'date-fns';

const targetSeconds = 1807;

// 计算总分钟数和剩余秒数
const totalMinutes = Math.floor(targetSeconds / 60);
const remainingSeconds = targetSeconds % 60;

// 用padStart确保两位数格式
const formattedTime = `${padStart(totalMinutes.toString(), 2, '0')}:${padStart(remainingSeconds.toString(), 2, '0')}`;

console.log(formattedTime); // 输出 "30:07"

这个方法的好处是完全按总分钟数计算,不受小时单位限制,适合需要统一显示「分钟:秒」的场景。


对比原生JS的话,你需要自己实现补零逻辑(比如写个函数判断数字是否小于10,前面加0),而date-fns已经帮你封装好了这些常用工具,代码更易读也更可靠。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:03:24