使用Javascript将小时转换为HH:MM:SS
我使用的api需要HH:MM:SS格式的时间,但是我的输出只是显示时间的数值(例如:8:00am作为8输出)。如何将其转换为HH:MM:SS格式使用Javascript将小时转换为HH:MM:SS,javascript,node.js,Javascript,Node.js,我使用的api需要HH:MM:SS格式的时间,但是我的输出只是显示时间的数值(例如:8:00am作为8输出)。如何将其转换为HH:MM:SS格式 let targetStr = getTree().data.boards[0].groups[0].items[0].name; let fields = ['DATE', 'TIME', 'DURATION', 'TYPE']; console.log(extractData(targetStr, fields)); function extr
let targetStr = getTree().data.boards[0].groups[0].items[0].name;
let fields = ['DATE', 'TIME', 'DURATION', 'TYPE'];
console.log(extractData(targetStr, fields));
function extractData(str, fields) {
return str.split(/\s*\|\s*/).reduce((res, entry) => {
let dat = entry.split(/\s*:\s*/);
return fields.indexOf(dat[0]) > -1 ? Object.assign(res, { [dat[0]]: dat[1] }) : res;
}, {});
}
function getTree() {
return {
"data": {
"boards": [{
"owner": {
"id": 555555555
},
"groups": [{
"id": "new_group",
"title": "Forecasts",
"items": [{
"id": "355670938",
"name": "PIPE: Production & Client Management | STAGE: New Support Intake | NAME: TESTY | DATE: 10/27/2019 | TIME: 8:00 am | TIME ZONE: Central Time | DURATION: 60 minutes | TYPE: All Virtual | AUDIENCE VIEW:"
}]
}]
}]
},
"account_id": 55555555
};
}
给定时间格式总是类似于“HH:MM(am | pm)”,u可以这样重新格式化:
let targetStr=getTree().data.boards[0]。组[0]。项[0]。名称;
let字段=[“日期”、“时间”、“持续时间”、“类型”];
常量数据=提取数据(targetStr,字段);
常量[小时,分钟,安培]=数据.TIME.split(/[\s |::]/);
console.log({
数据
时间:[
(amPm=='am')?小时:(parseInt(小时)+12),
分钟
'00'
].join(“:”)
});
函数提取数据(str,字段){
返回str.split(/\s*\\s*/).reduce((res,entry)=>{
let[key,…val]=entry.split(/\s*:\s*/);
返回fields.indexOf(key)>-1?Object.assign(res,{[key]:val.join(':')}):res;
}, {});
}
函数getTree(){
返回{
“数据”:{
“董事会”:[{
“所有者”:{
“id”:555
},
“团体”:[{
“id”:“新集团”,
“标题”:“预测”,
“项目”:[{
“id”:“355670938”,
“名称”:“管道:生产和客户管理|阶段:新支持摄入|名称:测试|日期:2019年10月27日|时间:上午8:00 |时区:中部时间|持续时间:60分钟|类型:所有虚拟|观众视图:”
}]
}]
}]
},
“账户id”:5555
};
}
可以提取h
、m
和am
/pm
部件,如果是pm
,则可用12增加pm
。由于输入没有秒字段,因此它只是在末尾追加一个:00
:
功能hms(无论什么){
var parts=which.match(/TIME\:\s(\d+):(\d+)\s([^\s]+)/);
var h=parseInt(第[1]部分);
var m=零件[2];
如果(零件[3]=“pm”)h+=12;
返回(“0”+h).slice(-2)+:“+m+”:00”;
}
var test1=“管道:生产和客户管理|阶段:新支持摄入|名称:TESTY |日期:2019年10月27日|时间:上午8:00 |时区:中心时间|持续时间:60分钟|类型:所有虚拟|观众视图”;
var test2=“管道:生产和客户管理|阶段:新支持摄入|名称:TESTY |日期:2019年10月27日|时间:晚上8:00 |时区:中央时间|持续时间:60分钟|类型:所有虚拟|观众视图”;
console.log(hms(test1));
console.log(hms(test2))代码>
let targetStr=getTree().data.boards[0]。组[0]。项[0]。名称;
let字段=[“日期”、“时间”、“持续时间”、“类型”];
日志(提取数据(targetStr,字段));
函数提取数据(str,字段){
返回str.split(/\s*\\s*/).reduce((res,entry)=>{
var dat=entry.split(/\s*:\s*/);
如果(数据长度>2){
dat=(dat+“”).split(‘,’);
dat[2]=dat[2]。拆分(“”);
dat[1]=校验时间(dat[1],dat[2][1])
dat[1]=dat[1]。concat(':'+dat[2][0]+':00')
}
返回fields.indexOf(dat[0])>-1?Object.assign(res,{[dat[0]]:dat[1]}):res;
}, {});
}
功能检查时间(i,m){
如果(i<10){
i=“0”+i;
}
如果(m='pm'){
i=parseInt(i)+12
}
返回i+“”;
}
函数getTree(){
返回{
“数据”:{
“董事会”:[{
“所有者”:{
“id”:555
},
“团体”:[{
“id”:“新集团”,
“标题”:“预测”,
“项目”:[{
“id”:“355670938”,
“名称”:“管道:生产和客户管理|阶段:新支持摄入|名称:测试|日期:2019年10月27日|时间:上午8:00 |时区:中部时间|持续时间:60分钟|类型:所有虚拟|观众视图:”
}]
}]
}]
},
“账户id”:5555
};
} /代码>您是否考虑使用LIB?当您开始使用日期和时间时,moment.js非常有用。检查:因为您的数据有缺陷:不能出现在字段中,因为它是语法的一部分。您可以使用“”:“
”进行拆分,但最好使用支持此功能的语法,例如JSON或XML。您能够控制API的输出吗?API似乎有问题,以有问题的格式返回时区未知时间(见上文)。IMO API的最佳输出格式是ISO字符串:2019-10-24T12:52:05+00:00
。任何像样的库,如momentjs
,都可以完美地解析这一点。这是我使用过的最差的API谢谢!我怎样才能在10点前的几个小时添加0?例如,测试中的8是8:00:00,我需要它在08:00:00?Sorrylook这里:@klaurtar Ok,在前面添加了填充。它必须是08:00:00格式。因此,如果有一种方法可以在10:00:00之前在times前面附加一个0,那么您的解决方案将是完美的