【发布时间】:2015-09-25 08:40:15
【问题描述】:
我检查了大多数类似的问题,这个问题很有帮助
> 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?。 -
顺便说一句,我不确定年份和月份的值是否合适,应该有一些闰年和不同月份长度的余量,请参阅ISO 8601 duration and time stamps in SCORM 2004,它建议
1 month = ((365 * 4) + 1)/48 days并使用@ 987654326@,而 OP 中的代码分别使用 30 天和 365 天(所以 12 个月!= 1 年乘以 5.25 天)。
标签: javascript youtube formatting duration