如何使用 JavaScript 以 PT#M#S 格式操作日期时间?
例如:PT5M33S
我想输出为hh:mm:ss
.
这是获取总秒数和其他部分的基本代码。这样做我感到不安,因为规则说,任何时候你都不应该对逻辑进行约会:) 但无论如何,就这样 - 谷歌让它变得不容易,在 getduration 播放器 API 中提供总秒数,并提供完全不同的gdata api 中的格式。
var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/;
var hours = 0, minutes = 0, seconds = 0, totalseconds;
if (reptms.test(input)) {
var matches = reptms.exec(input);
if (matches[1]) hours = Number(matches[1]);
if (matches[2]) minutes = Number(matches[2]);
if (matches[3]) seconds = Number(matches[3]);
totalseconds = hours * 3600 + minutes * 60 + seconds;
}
这是您如何通过Youtube API (v3)以简单的方式获取 youtube 视频数据并将视频持续时间 (ISO 8601) 转换为秒的方法。不要忘记将URL 中的{ YOUR VIDEO ID }和{ YOUR KEY }属性更改为您的视频 ID和您的公共 google 密钥。您可以创建一个访问谷歌开发者控制台的公钥。
$.ajax({
url: "https://www.googleapis.com/youtube/v3/videos?id={ YOUR VIDEO ID }&part=contentDetails&key={ YOUR KEY }",
dataType: "jsonp",
success: function (data) { youtubeCallback (data); }
});
function youtubeCallback(data) {
var duration = data.items[0].contentDetails.duration;
alert ( convertISO8601ToSeconds (duration) );
}
function convertISO8601ToSeconds(input) {
var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/;
var hours = 0, minutes = 0, seconds = 0, totalseconds;
if (reptms.test(input)) {
var matches = reptms.exec(input);
if (matches[1]) hours = Number(matches[1]);
if (matches[2]) minutes = Number(matches[2]);
if (matches[3]) seconds = Number(matches[3]);
totalseconds = hours * 3600 + minutes * 60 + seconds;
}
return (totalseconds);
}
虽然这些答案在技术上是正确的;如果您打算在时间和持续时间上做很多事情,您应该查看momentjs 。另请查看moment-duration-formats,它使格式化持续时间与常规 momentjs 时间一样简单
一个例子说明这 2 个模块是多么容易做到这一点
moment.duration('PT5M33S').format('hh:mm:ss')
这将输出 05:33。还有很多其他用途。
尽管 youtube 使用 ISO8601 格式是有原因的,因为它是一种标准,所以请记住这一点。
我通过检查单位左侧的两个索引字符(H,M,S)并检查它是否是数字来实现这一点,如果不是,则单位是单个数字,我在前面加上一个额外的“0”。否则我返回两位数。
function formatTimeUnit(input, unit){
var index = input.indexOf(unit);
var output = "00"
if(index < 0){
return output; // unit isn't in the input
}
if(isNaN(input.charAt(index-2))){
return '0' + input.charAt(index-1);
}else{
return input.charAt(index-2) + input.charAt(index-1);
}
}
我这样做了几个小时、几分钟和几秒钟。如果输入中没有任何时间,我也会减少时间,这当然是可选的。
function ISO8601toDuration(input){
var H = formatTimeUnit(input, 'H');
var M = formatTimeUnit(input, 'M');
var S = formatTimeUnit(input, 'S');
if(H == "00"){
H = "";
}else{
H += ":"
}
return H + M + ':' + S ;
}
然后就这样称呼它
duration = ISO8601toDuration(item.duration);
我用它来格式化 youtube 数据 API 视频持续时间。希望这可以帮助某人