Need Fix on Convert standard time to Military

I got this function off of this site from an expert but it's flawed.

For example:

  12:00 AM is returning 12:00, when it actually should be returning 00:00.
  It's pretty screwed up.. I can post my conversion code for doing Military to Standard if that helps.
  Thanks

function to_military( val )  {            
    var pm = 0, hour = 0, min = 0;
    if( val.search( /PM/i ) >= 0 )
        pm = 12, val = val.replace( /PM/i, "" );
    if( val.search( /AM/i ) >= 0 )
        val = val.replace( /AM/i, "" );
    var vals = val.split( /[^0-9]+/ );
    hour = parseInt( vals[ 0 ] );
    if( hour > 24 ) hour = 0;
    if( hour <= 12 ) hour = ( hour + pm ) % 24;
    if( hour < 10 ) hour = "0" + hour;
    min = ( vals.length > 1 ) ? parseInt( vals[ 1 ] ) : 0;
    if( min < 10 ) min = "0" + min;
    return hour + ":" + min;
}


Here's some easy test code to copy/paste so you can test.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<script>
function to_military( val )  {            
    var pm = 0, hour = 0, min = 0;
    if( val.search( /PM/i ) >= 0 )
        pm = 12, val = val.replace( /PM/i, "" );
    if( val.search( /AM/i ) >= 0 )
        val = val.replace( /AM/i, "" );
    var vals = val.split( /[^0-9]+/ );
    hour = parseInt( vals[ 0 ] );
    if( hour > 24 ) hour = 0;
    if( hour <= 12 ) hour = ( hour + pm ) % 24;
    if( hour < 10 ) hour = "0" + hour;
    min = ( vals.length > 1 ) ? parseInt( vals[ 1 ] ) : 0;
    if( min < 10 ) min = "0" + min;
    return hour + ":" + min;
}
</script>
<table>
  <tr>
    <td>from standard&nbsp;&nbsp;<input type="text" onChange="this.value=to_military(this.value)"></td>
  </tr>  
</table>
</body>
</html>
LVL 6
dgelinasAsked:
Who is Participating?
 
ftaco96Connect With a Mentor Commented:
You don't need to do all that. This is much simpler...

var dt = new Date("1/1/2000 " + val);
var hour = dt.getHours();
var min = dt.getMinutes();
etc.  

And it even validates whether the time is a valid time string.
0
 
LakioCommented:
add
  if( hour == 12 ) hour = 0;
?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.