Javascript将不同的字符串格式化为标准间隔格式

时间:2016-11-02 19:51:58

标签: javascript datetime

我的字符串可能是以下列表中的任何一个:

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

7 个答案:

答案 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)

&#13;
&#13;
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;
&#13;
&#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'));

https://jsfiddle.net/5p9bqjwy/1/

答案 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)));