转换时间字符串格式

我想在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'; } 

我认为你在这里错误地使用indexOf

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

从文档:

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

可能你的意思是:

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

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

我想将几乎任何类型的时间格式转换为格式HH:mm:ss in javacript

看看这个: http : //www.datejs.com/

没有理由重新发明轮子。

但是,如果您需要自己实现,那么我相信Mark的解决方案会有所帮助

你正在使用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; } 

也许你应该使用捕获的组而不是再次解析字符串:

 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"; }