从时间格式中删除前导零

13
我收到一个这样的字符串,格式为'HH:mm:ss'。我想去掉前导零,但始终保留最后四个字符,例如m:ss,即使m是零。我正在格式化音频持续时间。
范例: 00:03:15 => 3:15
10:10:10 => 10:10:10
00:00:00 => 0:00
04:00:00 => 4:00:00
00:42:32 => 42:32
00:00:18 => 0:18
00:00:08 => 0:08
5个回答

17

您可以使用此替换:

var result = yourstr.replace(/^(?:00:)?0?/, '');

演示

或者更好的方式:

var result = yourstr.replace(/^0(?:0:0?)?/, '');

演示


针对Matt的例子(见评论),您可以将模式更改为:

^[0:]+(?=\d[\d:]{3})

对于 0:00:00 返回 :00:00 - Matt
@Matt:从问题中得知:“我收到的字符串格式为'HH:mm:ss'”。 - Casimir et Hippolyte
我的错,没错 - Matt
@Matt:不用担心,你给了我改进回答的机会。 - Casimir et Hippolyte
非常感谢。这就像魔法一样奏效了。 - Bishal Paudel

9

如果您使用1个小时而不是两个,那么您将不会得到前导的0。

时:分:秒


它仍然可以支持多位数小时,例如10:00吗? - Nick Gallimore
@NickGallimore 是的,它可以! - Prashant Singhal
1
LOL和我们头顶上的喧闹声,嘿嘿(谢谢) - GaddMaster
它不工作了24小时。 - Muhammad Awais

3
另一种选择是使用moment.js库。
该库支持如下格式:
var now = moment('1-1-1981 2:44:22').format('h:mm:ss');
alert(now);

http://jsfiddle.net/8yqxh5mo/


1
你可以像这样做:

var tc =['00:03:15', '10:10:10','00:00:00','04:00:00','00:42:32','00:00:18','00:00:08'];

tc.forEach(function(t) {
    var y = t.split(":");
    y[0] = y[0].replace(/^[0]+/g, '');
    if(y[0] === '') {
        y[1] = y[1].replace(/^0/g, ''); 
    }
    var r = y.filter(function(p) {return p!=='';}).join(':');
    console.log(r);
});

将时间分为3个部分。如果第一部分为空,则从第二部分中删除前导零,否则保留它。然后将它们全部连接起来,丢弃空字符串。

0

我在使用一个小写的 'h' 进行格式化时,遇到了 ZUL 时间的问题:moment(date).format('h:mm A') 会从时间中删除第一个数字:

我的 const arrivalTime = "2022-07-21T12:10:51Z"

const result = moment(arrivalTime).format(('h:mm A')) // 2:10 PM

解决方法是将其转换为ISO格式,然后进行格式化:
const arrivalTimeIsoFormat = arrivalTime.toISOString()
const result = moment(arrivalTimeIsoFormat, "YYYY-MM-DDTHH:mm:ss.SSS").format(('h:mm A')) // 12:10 PM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接