2016-07-26 58 views
0

我从我的数据库时喜欢接受HH:MM:SS,并在javascript我想放像HH时间:毫米 这是我的代码像时间的正则表达式格式的Javascript数量

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”,任何帮助?

感谢

+1

制造这样的[MCVE]为您服务。 – Jamiec

+1

根本没有在这里看到正则表达式的需要。考虑使用实际的Date变量。这会产生验证输入值的副作用,因为如果未传递有效格式,则无法成功创建Data对象。 –

回答

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

+0

不要忘记,他们的正则表达式允许输入周围的空白,你可能想'trim()'结果 – Jamiec

+0

@Jamiec谢谢。但是我在这里直接使用了''10:01:30''字符串。所以,在这种情况下,它应该可以正常工作。没有? –

+0

但是如果输入是“10:01:30”(因为正则表达式暗示可能),那么你的'formattedTime'变量就会有这些额外的空格。 – Jamiec

1

难道你不能只做以下吗?:

function formatTime(time) { 
     var array = time.split(':'); 
     return array[0] + ':' + array[1]; 
    } 
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; 
 
}

+0

谢谢大家....我按照Jamiec的例子。现在工作 – gmc1972

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