我已经检查的最类似的问题,而这一次是有帮助转换YouTube API持续时间(格式为ISO 8601持续时间),以H:M:S,时制,没有 “T” 在JavaScript
> function parseDuration(PT) { var output = []; var durationInSec =
> 0; var matches =
> PT.match(/P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)W)?(?:(\d*)D)?T(?:(\d*)H)?(?:(\d*)M)?(?:(\d*)S)?/i);
> var parts = [
> { // years
> pos: 1,
> multiplier: 86400 * 365
> },
> { // months
> pos: 2,
> multiplier: 86400 * 30
> },
> { // weeks
> pos: 3,
> multiplier: 604800
> },
> { // days
> pos: 4,
> multiplier: 86400
> },
> { // hours
> pos: 5,
> multiplier: 3600
> },
> { // minutes
> pos: 6,
> multiplier: 60
> },
> { // seconds
> pos: 7,
> multiplier: 1
> } ];
> for (var i = 0; i < parts.length; i++) {
> if (typeof matches[parts[i].pos] != 'undefined') {
> durationInSec += parseInt(matches[parts[i].pos]) * parts[i].multiplier;
> } }
> // Hours extraction if (durationInSec > 3599) {
> output.push(parseInt(durationInSec/3600));
> durationInSec %= 3600; } if (durationInSec >= 86399) {
> output.push("24:00"); } // Minutes extraction with leading zero output.push(('0' + parseInt(durationInSec/60)).slice(-2));
> // Seconds extraction with leading zero output.push(('0' +
> durationInSec % 60).slice(-2));
> return output.join(':'); };
https://jsfiddle.net/Daugilas/kbeb0p99/1/回答@Daugilas Kakaras
但我发现一个格式为P1D(一天),没有“T”的视频,上面的函数无法格式化它。
PT1D - 没有作品也一样P1D,我已经试过... –
哦,现在我明白了。我以为你遇到了与“P1H”有关的问题,但是看起来你遇到了与“P1D”有关的问题,就像你在OP中写的一样。傻我......你只需要'T?'。 – RobG
顺便说一句,我不确定年份和月份的数值是否合适,应该有一些闰年补贴和不同的月份长度,请参阅[* SCORM 2004 *中的ISO 8601持续时间和时间戳](http:// www建议1个月=((365 * 4)+ 1)/ 48天,并使用'1年= 365.25天',而代码为.ostyn.com/standards/scorm/samples/ISOTimeForSCORM.htm#durationfmt)在OP中分别使用30天和365天(因此12个月!= 1年5.25天)。 – RobG