转换时间字符串格式

时间:2011-11-03 07:02:24

标签: javascript jquery

我想将时间数据转换为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';
    }

4 个答案:

答案 0 :(得分:3)

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

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

来自文档:

  

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

可能你的意思是:

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

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

答案 1 :(得分:2)

  

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

检查出来:http://www.datejs.com/

没有理由重新发明轮子。

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

答案 2 :(得分: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;
    }

答案 3 :(得分: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";
}