【问题标题】:Convert ISO 8601 time format into normal time duration将 ISO 8601 时间格式转换为正常持续时间
【发布时间】:2013-09-30 11:27:47
【问题描述】:

我有一个持续时间字符串“PT1M33S”。 我想得到以下格式的结果-> 01:33 谁能告诉我如何使用 js 或 jquery 做到这一点?

【问题讨论】:

  • "PT1M:33S" 看起来不像是有效的 ISO 8601 日期。最接近的格式是“YYYY-MM-DDTHH:mm:ss”。
  • 实际上我正在获取 youtube 视频,并且我将视频的持续时间设为“PT1M33S”。现在我需要将其转换为正常时间格式。
  • 你可以用一个简单的正则表达式来解析它。或者您可以查看 youtube API 还提供的值 durationMs(以毫秒为单位的持续时间)是否更适合您的需求……
  • 郑重声明,此有效的 ISO8601 格式。见en.wikipedia.org/wiki/ISO_8601#Durations

标签: javascript jquery


【解决方案1】:

您可以匹配数字并将它们填充为格式-

var string= "PT1M33S", 
array=string.match(/(\d+)(?=[MHS])/ig)||[]; 

var formatted=array.map(function(item){
    if(item.length<2) return '0'+item;
    return item;
}).join(':');

formatted

/* 返回值:(字符串) 01:33 */

【讨论】:

    【解决方案2】:

    这似乎不是时间格式,只是视频的持续时间。

         ------ 33 Seconds
        ''
    PT1M33S
      '------- 1 Minute
    

    H - 小时
    M - 分钟
    S-秒

    所以试试这个

    var timeD = "PT1M33S";
    var formattedTime = timeD.replace("PT","").replace("H",":").replace("M",":").replace("S","")
    alert(formattedTime);
    

    例如Fiddle,也可以用一个简单的正则表达式来完成。

    希望你能理解。

    【讨论】:

    • 谢谢...!!这是一个非常简单的...!喜欢它
    • 非常聪明的解决方案
    • 但不适用于个位数的分钟或秒数 - "PT2H1M5S" - 2:1:5
    • @mhlavacka 我认为是的。 2H1M5S 表示2:1:5
    【解决方案3】:

    我个人使用这个:

    function parseDuration(e){var n=e.replace(/D|H|M/g,":").replace(/P|T|S/g,"").split(":");if(1==n.length)2!=n[0].length&&(n[0]="0"+n[0]),n[0]="0:"+n[0];else for(var r=1,l=n.length-1;l>=r;r++)2!=n[r].length&&(n[r]="0"+n[r]);return n.join(":")}
    

    格式相同的代码:

    function parseDuration(e){
        var n = e.replace(/D|H|M/g,":").replace(/P|T|S/g,"").split(":");
    
        if(1 == n.length)
            2!=n[0].length && (n[0]="0"+n[0]),n[0]="0:"+n[0];
        else 
            for(var r=1, l=n.length-1; l>=r;r++)
                2!=n[r].length && (n[r]="0"+n[r]);
    
        return n.join(":")
    }
    

    【讨论】:

    • 工作出色,一段非常漂亮的代码,以可供使用的格式输出时间。
    【解决方案4】:

    我喜欢这个答案,因为它很简单,但是,如果分钟或秒小于 10,它会产生奇怪的结果,例如,10:04 返回为 10:4。

    所以我添加了一些简单的函数来进一步解析和重新组装时间字符串:

    function formatTimeSeg(segment) {
        newSegment = segment;
        segLength = segment.length;
        if(segLength==1){
            newSegment = '0'+segment;
        }
    return newSegment;
    }
    extractedTime = duration.replace("PT","").replace("H",":").replace("M",":").replace("S","")
    extractedTime = extractedTime.split(':');
    timeLength = extractedTime.length;
    switch(timeLength) {
        case 3:
            hours=extractedTime[0];minutes=extractedTime[1];seconds=extractedTime[2];
            minutes = formatTimeSeg(minutes);
            seconds = formatTimeSeg(seconds);
            formattedTime = hours+':'+minutes+':'+seconds;
        break;
        case 2:
            minutes=extractedTime[0];seconds=extractedTime[1];
            minutes = formatTimeSeg(minutes);
            seconds = formatTimeSeg(seconds);
            formattedTime = minutes+':'+seconds;
        break;
        case 1:
            seconds=extractedTime[0];
            seconds = formatTimeSeg(seconds);
            formattedTime = '0:'+seconds;
        break
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多