如何解析timepan字符串到小时,分钟?

时间:2015-08-17 07:30:33

标签: javascript regex parsing timespan

我有一个字符串" P18DT5H2M3S"这意味着:18天,5小时,2分钟,3秒。

我必须将此字符串解析为小时和分钟。我应该使用正则表达式还是split或substr等...?

(关于这个How can I convert come string timespan variable from Wcf to hours and minutes?

4 个答案:

答案 0 :(得分:1)

你可以随意使用。

以下是使用带有正则表达式的split方法的示例。



int result = numberofsquarefeet(numberofsquarefeet, 115, 1);
System.out.println("Number of square feet: " + result);




你可以使用substr,但为此你必须找到字母索引。因此使用正则表达式进行吐出更简单。

答案 1 :(得分:1)

所以我接受了@ chandil03的答案并调整它以返回HH:MM:SS格式。



 var stamp = "PT2H10M13S"

    // strip away the PT

    stamp = stamp.split("PT")[1];

    // split at every character

    var tokens = stamp.split(/[A-Z]+/);

    // If there are any parts of the time missing fill in with an empty string.
    // e.g "13S" we want ["", "", "13", ""]

    for(var i = 0; i < 4 - stamp.length; i++){
       tokens.unshift("");
    }

    // Here we add logic to pad the values that need a 0 prepended.

    var stampFinal = tokens.map(function(t){
        if(t.length < 2){
            if(!isNaN(Number(t))){
               return ("0"  + Number(t).toString());
            }
         }
         return t;
    });

    // pop the last element because it is an extra. 

    stampFinal.pop();

    console.log(stampFinal.join(":"));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我找到了这个页面: http://www.petershev.com/blog/net-timespans-returned-by-breeze-js-or-working-with-iso8601-duration-standard/

所以当我加入https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js这个js时,

我可以转换 duration = moment.duration.fromIsoduration('P18DT5H2M3S'); duration._data可以使用 它有_days,_hours,_minutes

答案 3 :(得分:0)

请找到我的解决方案,基于inoabrian's。

function fromString(timeSpan) {
    var hours = 0;
    var minutes = 0;
    var seconds = 0;
    if (timeSpan != null && typeof (timeSpan) == 'string' && timeSpan.indexOf('PT') > -1) {
        timeSpan = timeSpan.split("PT")[1].toLowerCase();
        var hourIndex = timeSpan.indexOf('h');
        if (hourIndex > -1)
        {
            hours = parseInt(timeSpan.slice(0, hourIndex));
            timeSpan = timeSpan.substring(hourIndex + 1);
        }

        var minuteIndex = timeSpan.indexOf('m');
        if (minuteIndex > -1)
        {
            minutes = parseInt(timeSpan.slice(0, minuteIndex));
            timeSpan = timeSpan.substring(minuteIndex + 1);
        }

        var secondIndex = timeSpan.indexOf('s');
        if (secondIndex > -1)
            seconds = parseInt(timeSpan.slice(0, secondIndex));

    }
    return [hours, minutes, seconds];
}