2011-11-03 73 views
2

我想在JavaScript中将时间数据转换为格式HH:mm:ss。 我已经在我的代码有问题(见里面的代码注释):转换时间字符串格式

function parseTime(timeString){ 

    var timeString = timeString.toLowerCase(); 
    timeString = $.trim(timeString); 

    var regEx = /^([0-9]|1[0-9]|2[0-3])$/; 
    var regEx2 = /^([0-9]|1[0-9]|2[0-3])\.?([0-5][0-9])$/; 
    var regEx3 = /^([0-9]|1[0-2])(a|p|am|pm)$/; 
    var regEx4 = /^([1-9]|10|11|12)\.?([0-5][0-9])(a|p|am|pm)$/; 

    if(regEx.test(timeString)){ 
     var hours = timeString; 
     if(hours.length == 1){ 
      hours = '0' + hours; 
     } 
     return hours + ':00:00'; 
    } 
    else if(regEx2.test(timeString)){ 
     var hoursEndIndex, minutesStartIndex; 
     if(timeString.indexOf('.')){ 
      hoursEndIndex = timeString.indexOf('.'); 
      minutesStartIndex = timeString.indexOf('.') + 1; 
     }else if(timeString.length == 3){//Problem here timeString.length returns 3 but the code below isn't executed? 
      hoursEndIndex = 1; 
      minutesStartIndex = 1; 
     }else if(timeString.length == 4){//Same thing here? 
      hoursEndIndex = 2; 
      minutesStartIndex = 2; 
      return timeString.length; 
     } 
     var hours = timeString.substring(0, hoursEndIndex); 
     if(hours.length == 1){ 
      hours = '0' + hours; 
     } 
     var minutes = timeString.substr(minutesStartIndex, 2); 
     return hours + ':' + minutes + ':00'; 
    } 

回答

3

我认为你正在使用indexOf正确位置:

if(timeString.indexOf('.')){ 

从文档:

返回数组中可以找到给定元素的第一个索引,如果不存在则返回-1。

也许你的意思是这样的:

if(timeString.indexOf('.') > -1) { 

与您的代码在第一if语句中的表达式为真,即使字符串不包含一个点。这意味着else if语句将永远不会执行。

+0

你可能有一个点 – einstein

+0

是的,情况就是这样!感谢马克的快速反应! – einstein

0

您使用的是else if,它要求所有前面的条件块等于false。

试试这个:

if(timeString.indexOf('.')){ 
     hoursEndIndex = timeString.indexOf('.'); 
     minutesStartIndex = timeString.indexOf('.') + 1; 
    } 
    if(timeString.length == 3){ 
     hoursEndIndex = 1; 
     minutesStartIndex = 1; 
    } else if(timeString.length == 4){ 
     hoursEndIndex = 2; 
     minutesStartIndex = 2; 
     return timeString.length; 
    } 
2

我想在几乎任何一种时间格式转换为格式HH:MM:SS在javacript

检查了这一点:http://www.datejs.com/

没有理由重新发明车轮。

不过,如果你需要这个工具自己,那么我相信马克的解决方案将帮助,而不是再次解析字符串

0

也许你应该使用捕捉组:

var groups = regEx2.exec(timeString); 
if(groups){ 
    var hours = groups[0]; 
    if(hours.length == 1){ 
     hours = '0' + hours; 
    } 
    var minutes = groups[1]; 
    return hours + ":" + minutes + ":00"; 
} 
相关问题