Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将值转换为可读小时数_Javascript - Fatal编程技术网

Javascript 将值转换为可读小时数

Javascript 将值转换为可读小时数,javascript,Javascript,我有以下几点: var case1 = '5.25 - 12.25, 13 - 18.5'; var case2 = '6.5 - 12, 13 - 18.5'; var case3 = '9 - 13, 14 - 18'; 我需要将它们转换为: result1; //05:15 - 12:15, 13:00 - 18:30; result2; //06:30 - 12:00, 13:00 - 18:30; result3; //09:00 - 13:00, 14:00 - 18:00; 是

我有以下几点:

var case1 = '5.25 - 12.25, 13 - 18.5';
var case2 = '6.5 - 12, 13 - 18.5';
var case3 = '9 - 13, 14 - 18';
我需要将它们转换为:

result1; //05:15 - 12:15, 13:00 - 18:30;
result2; //06:30 - 12:00, 13:00 - 18:30;
result3; //09:00 - 13:00, 14:00 - 18:00;
是否可以只使用正则表达式

规则:

1) 如果数字小于10,则添加前导0。
2) 将
.25
替换为
:15
,将
.5
替换为
:30

3) 如果点后没有任何内容,请添加
00


我试着用条件、替换等来实现它,但结果很糟糕。

您可以使用一个正则表达式,但使用
replace
回调函数:

const案例=[
'5.25 - 12.25, 13 - 18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'
];
const result=cases.map(c=>c.replace(/(\d+)(\。\d+)?/g,(\uh,m)=>
('0'+h).substr(-2)+':'+('0'+(数学地板(m*60)| | 0)).substr(-2)
));

控制台日志(结果)
您可以使用一个正则表达式,但使用
replace
回调函数:

const案例=[
'5.25 - 12.25, 13 - 18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'
];
const result=cases.map(c=>c.replace(/(\d+)(\。\d+)?/g,(\uh,m)=>
('0'+h).substr(-2)+':'+('0'+(数学地板(m*60)| | 0)).substr(-2)
));
控制台日志(结果)非正则表达式解决方案:

const cases = [
  '5.25 - 12.25, 13 - 18.5',
  '6.5 - 12, 13 - 18.5',
  '9 - 13, 14 - 18'
];

const result = cases.map( c =>
   c.split(", ").map(range =>
      range.split(" - ").map(time => {
         const [hours,mins] = time.split(".");
         return ("00"+hours).substr(-2)+":"+(Math.floor( mins*6/10 ) || "00");
      }).join(" - ")
   ).join(", ")
);
非正则表达式解决方案:

const cases = [
  '5.25 - 12.25, 13 - 18.5',
  '6.5 - 12, 13 - 18.5',
  '9 - 13, 14 - 18'
];

const result = cases.map( c =>
   c.split(", ").map(range =>
      range.split(" - ").map(time => {
         const [hours,mins] = time.split(".");
         return ("00"+hours).substr(-2)+":"+(Math.floor( mins*6/10 ) || "00");
      }).join(" - ")
   ).join(", ")
);

var案例=['5.25-12.25,13-18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'];
cases.forEach(函数(src){
var times=src.replace(/([\d\.])+/g,函数(匹配){
var秒=匹配*60;
var分钟=parseInt(秒/60);
var seconds=“00”+秒数%60;
秒=秒.substr(秒.长度-2);
返回分钟+“:”+秒;
});  
console.log(次);
});
var案例=['5.25-12.25,13-18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'];
cases.forEach(函数(src){
var times=src.replace(/([\d\.])+/g,函数(匹配){
var秒=匹配*60;
var分钟=parseInt(秒/60);
var seconds=“00”+秒数%60;
秒=秒.substr(秒.长度-2);
返回分钟+“:”+秒;
});  
console.log(次);

});对于某些答案,您的案例字符串必须具有严格的格式,例如空格后。或之后-否则它将中断。对于某些答案,您的大小写字符串必须具有严格的格式,例如空格后。或者在之后-否则它会坏的。trincot谢谢这工作!你能包括没有ES6的例子吗?trincot谢谢你的帮助!但是,您是否可以包括没有ES6的示例?