我的字符串可能是以下列表中的任何一个:
7
5:45
11:05
23:5
14:3
我希望总是最终得到:
07:00
05:45
11:05
23:50
14:30
etc
如何在Javascript中编写一个很好的函数,并将其输入正确的输出?记住单小时值不会有冒号,如列表开头的7。
我尝试使用PadZero功能:
Number.prototype.padZero= function(len){
var s= String(this), c= '0';
len= len || 2;
while(s.length < len) s= c + s;
return s;
}
与
var formattedY = this.x.padZero().toString().replace('.',':');
P.S。我的实际值回到11.5或23.45,但我想要11:50和23:45
答案 0 :(得分:1)
我认为这个简单的开关将成为技巧
function getHour(hour) {
var newHour;
switch (hour.length) {
case 1:
newHour = '0'+hour+':00';
break;
case 2:
newHour = hour+':00';
break;
case 3:
newHour = '0'+hour+'0';
break;
case 4:
newHour = hour.charAt(2) == ":" ? hour+'0' : '0'+hour;
break;
default:
newHour = hour;
}
console.log(newHour);
}
getHour('7'); //07:00
getHour('8:5'); //08:50
getHour('17:35'); //17:35
getHour('02:5'); //02:50
getHour('2:43'); //02:43
答案 1 :(得分:1)
此功能可以解决您的问题。
function format_time(invalid_time_string) {
var corrected_time = invalid_time_string;
if (invalid_time_string.length === 1) {
invalid_time_string = "0" + invalid_time_string + ":00";
corrected_time = invalid_time_string;
} else {
if (invalid_time_string.length < 5) {
var hours_minutes = invalid_time_string.split(":");
if (hours_minutes[0].length != 2) {
var corrected_hours = "0" + hours_minutes[0];
} else {
var corrected_hours = hours_minutes[0];
}
if (hours_minutes[1].length != 2) {
var corrected_minutes = hours_minutes[1] + "0";
} else {
var corrected_minutes = hours_minutes[1];
}
corrected_time = corrected_hours + ":" + corrected_minutes;
}
}
return corrected_time;
}
var correct_time = format_time("5:45");
console.log(correct_time);
答案 2 :(得分:0)
frm('7:10');
frm('17:01');
frm('1:1');
frm('7');
function frm(val) {
var parts = val.split(':');
if(parts.length === 1) {
parts.push('00');
}
var res = parts.map(function(i) {
return ('0' + i).slice(-2);
}).join(':');
console.log(res);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 3 :(得分:0)
function getCleanTimeString(timeString)
{
if(m=timeString.match(/(\d+)(?:[:](\d+))?/))
{
var h = parseInt(m[1],10);
var m = parseInt((m[2]+'0').substr(0,2),10)||0;
return ('0' + h).slice(-2)+':'+('0' + m).slice(-2);
}
return timeString;//failure
}
alert(getCleanTimeString('7'));
alert(getCleanTimeString('5:45'));
alert(getCleanTimeString('11:05'));
alert(getCleanTimeString('23:5'));
alert(getCleanTimeString('14:3'));
答案 4 :(得分:0)
我从第一个答案中取出代码进来并想出了这个:
String.prototype.frm= function() {
var val = this;
var parts = val.split(':');
if(parts.length === 1) {
parts.push('00');
}
var res = parts.map(function(i) {
return ('0' + i).slice(-2);
}).join(':');
return(res);
};
我可以用这个来打电话:
var formattedY = this.x.toString().replace('.',':').frm();
并获得PERFECT结果。
答案 5 :(得分:0)
这是一个有趣的:
function pad(str) {
switch (str.indexOf(':')) {
case -1: str = (str.length - 1 ? '' : 0) + str + ':00'; break;
case 1: str = 0 + str + (str.length < 4 ? 0 : ''); break;
case 2: str = str + (str.length < 5 ? 0 : ''); break;
}
return str;
}
console.log(pad('7'));
console.log(pad('12'));
console.log(pad('7:5'));
console.log(pad('7:55'));
console.log(pad('55:7'));
答案 6 :(得分:0)
由于您似乎不想写自己的代码,请考虑:
function weirdPadding(s) {
var b = s.split(':');
return ('0' + b[0]).slice(-2) + ':' + ((b[1] || '0') + '0').slice(0, 2);
}
['7','2:3','23:2','12:45'].forEach(function(t){
console.log(t + ' => ' + weirdPadding(t))
});
但是,我希望2:3应该是2:03,因为省略前导零而不是尾随零更常见。
在最新的浏览器中,您可以这样做:
function weirdPadding(s) {
return (/:/.test(s)? s : s + ':').split(':').reduce((h, m) => ('0' + h).slice(-2) + ':' + ((m || '0') + '0').slice(0, 2));
}
['7','2:3','23:2','12:45'].forEach(t => console.log(t + ' => ' + weirdPadding(t)));