将ISO 8601时间格式转换为正常持续时间

时间:2013-09-30 11:27:48

标签: javascript jquery

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

4 个答案:

答案 0 :(得分:13)

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

     ------ 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也可以使用简单的正则表达式完成。

希望你明白。

答案 1 :(得分:4)

您可以匹配数字并将其填充到格式 -

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

/ *返回值:(String) 01:33 * /

答案 2 :(得分:2)

我个人用这个:

@NodeEntity
class Group {

   @GraphId Long id;
   @Indexed int groupId;

   @RelatedTo(type="user_belongs_to",direction=INCOMING)
   Set<User> users;

}

interface GroupRepository extends GraphRepository<Group> {
   @Query("match (a:User)-[:user_belongs_to]-(b:Group) where a.userId = {userId} and b.groupId={groupId} return b")
   GroupEntity getGroup(@Param("userId") Long userId, @Param("groupId") Long groupId);

   // generated finder method
   GroupEntity findByGroupIdAndUsersUserId(@Param("groupId") Long groupId, @Param("userId") Long userId);
}

格式化相同的代码:

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(":")}

答案 3 :(得分:0)

我喜欢这个答案因为它很简单,但是,如果分钟或秒数小于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
}