AM/PM

Convert a date string with AM/PM format to a JavaScript Date object

by Patrick Hund

JavaScript

var input = [
    {
        str: "Sun Apr 25, 2010 3:30am"
    },
    {
        str: "Sun Apr 25, 2010 3:30pm"
    },
    {
        str: "Sun Apr 25, 2010 12:00am"
    },
    {
        str: "Sun Apr 25, 2010 12:00pm"
    },
    {
        str: "04/22/2014 11:40 PM"
    },
    {
        str: "04/22/2014 11:40 PM",
        gmt: -5
    }
];
  
for (var i = 0; i < input.length; i++) {
    console.log(input[i].str + (typeof input[i].gmt === "undefined" ? "" : " " + input[i].gmt) + " => " + convert(input[i].str, input[i].gmt).toString());
}

function convert(str, gmt) {

    var timestamp, date,
        gmtStr = typeof gmt === "undefined" ? "" : "GMT" + (gmt >= 0 ? "+" : "") + gmt;

    timestamp = Date.parse(str.replace(/[ap]m$/i, '') + gmtStr);

    date = new Date(timestamp);

    if (str.match(/am$/i) && date.getHours() === 12) {
        timestamp -= 12 * 60 * 60 * 1000;
    }
    if (str.match(/pm$/i) && date.getHours() !== 12) {
        timestamp += 12 * 60 * 60 * 1000;
    }
    
    return new Date(timestamp);
}