2015-08-17 3 views
1

У меня есть строка «P18DT5H2M3S», что означает: 18 дней, 5 часов, 2 минут, 3 секунды.Как я могу разобрать временную строку до часа, минут?

Мне нужно разобрать эту строку до часа и минуты. Должен ли я использовать регулярное выражение или split или substr и т. Д. ...?

(относительно этого How can I convert come string timespan variable from Wcf to hours and minutes?)

+1

Если я ошибаюсь, эта строка является длительностью https://en.wikipedia.org/wiki/ISO_8601. Это означает, что используйте библиотеку, которая поддерживает этот стандарт, например, http://momentjs.com/. –

+0

есть. Я нашел эту ссылку. http://www.petershev.com/blog/net-timespans-returned-by-breeze-js-or-working-with-iso8601-duration-standard/ – Kle

+0

Форматирование, теги – centic

ответ

1

Вы можете использовать все, что вы хотите.

Ниже приведен пример использования метода split с регулярным выражением.

var res = "P18DT5H2M3S"; 
 
var tokens = res.split(/[A-Z]+/); 
 
//var str = "D:"+token[1]+" H:"+tokens[2]+" M:"+tokens[3]+" S:"+tokens[4]; 
 
alert("D:"+tokens[1]+" H:"+tokens[2]+" M:"+tokens[3]+" S:"+tokens[4]);

Вы можете сделать с зиЬзЬг, но для этого вы должны найти индекс букв. Так что Spit с регулярным выражением - более простой подход.

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,

можно преобразовать длительность = moment.duration.fromIsoduration ('P18DT5H2M3S'); duration._data может быть использован имеет _days, _hours, _minutes

+0

ЧТОБЫ ВЫ МОЖЕТЕ –

1

Так что я взял @ ответ chandil03 и подправил его вернуть ЧЧ: ММ: СС.

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

0

Пожалуйста, найти мое решение, основанное на inoabrian годах.

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]; 
} 
Смежные вопросы