Javascript编号,如时间正则表达式格式

时间:2016-07-26 13:36:12

标签: javascript

我从我的数据库时间收到的时间就像hh:mm:ss,在javascript中我想把时间像hh:mm 这是我的代码



var time = '10:01:30';
console.log(time);
var res = formatTime(time);
console.log(res);

function formatTime(time) {
  var result = false, m;
  var re = /^\s*([01]?\d|2[0-3]):?([0-5]\d)\s*$/;
  if ((m = time.match(re))) {
    result = (m[1].length === 2 ? "" : "0") + m[1] + ":" + m[2];
    console.log(result);
  }
}




由于我收到" false",任何帮助,该功能都运作良好?

由于

4 个答案:

答案 0 :(得分:2)

可能是我在问题中遗漏了一些内容,但如果您只是想从hh:mm中提取hh:mm:ss部分,那么这应该可行:



// var time = "hh:mm:ss";
var time = "10:01:30";
var splitTime = time.trim().split(":"); // trim to remove any leading and trailing spaces
var formattedTime = splitTime[0] +":"+ splitTime[1];
console.log( formattedTime );




答案 1 :(得分:1)

你能不能做到以下几点?:

    function formatTime(time) {
      var array = time.split(':');
      return array[0] + ':' + array[1];
    }

答案 2 :(得分:1)

另一个答案(使用split)无疑是更简单的方法。

但是,如果您想知道为什么正则表达式不匹配,那是因为您的正则表达式正在寻找第一个(hh)块,然后是第二个(mm)块,但之后期待空白直到行结束 - ss部分没有允许。

我相当苛刻地改变了这一点,以便在mm部分后允许任何内容直到行尾。见下文。

另外,如果您想知道为什么formatTime函数会返回undefined,因为您忘了return result

var time = '10:01:30';
console.log(time);
var res = formatTime(time);
console.log(res);

function formatTime(time) {
  var result = false, m;
  var re = /^\s*([01]?\d|2[0-3]):?([0-5]\d).*$/;
  
  if ((m = time.match(re))) {
    result = (m[1].length === 2 ? "" : "0") + m[1] + ":" + m[2];
    console.log(result);
  }
  return result;
}

答案 3 :(得分:0)

我会考虑使用本机Date对象来进行格式化。这将为您做一些事情:

  • 自动验证正在输入的时间值。不需要正则表达式来做到这一点。输入字符串有效且函数有效,或者无效,函数返回NaN
  • 为您提供灵活的价值处理方式。需要转换时区,转换为Unix时间戳等?这些是在Date对象上构建的方法。
  • 赋予输入值灵活性。如果需要,您可以在此处使用其他字符串输入类型,只要它们可以允许实例化有效的Date对象。您需要修改正则表达式以允许多种输入类型或类似的东西。

使用此方法,示例代码可能如下所示:

function stripSecondsFromTimeString(time) {
    // create data object representing current date
    // the date is not really important here other than allowing
    // you to format a fully valid Date object with your time fragment
    var day = new Date();
    var dateInput = day.toDateString() + ' ' + time;
    var date = new Date(dateInput);

    // validate we were able to get useful Date object
    if(isNaN(date.getHours())) {
        return NaN;
    }

    // log out some values so you can see how you might more fully work with Date object
    console.log(date.toString());
    console.log(date.getDate());
    console.log(date.getHours());
    console.log(date.getMinutes());

    // prepare to return string
    var hours = '' + date.getHours();
    if(hours.length === 1) {
        hours = '0' + hours;
    }
    var minutes = '' + date.getMinutes();
    if(minutes.length === 1) {
        minutes = '0' + minutes;
    }
    return hours + ':' + minutes;
 }

// Usage examples

// your input time fragment
var inputTime = '10:01:30';
var formattedTime = stripSecondsFromTimeString(inputTime);
console.log(formattedTime);

// example failure case
var invalidTime = 'foo';
console.log(stripSecondsFromTimeString(invalidTime));