views:

48

answers:

7

hi I am new to javascript and am trying to compare two date values ,I am getting two time value strings in the format

06:30:47 AM

01:10:47 PM

I need to compare these to find out if the first one is less than the other.I couldn't figure out how to do this in javascript.Can someone help? o.h

A: 

Use the Date object. Check this: http://www.w3schools.com/jsref/jsref_obj_date.asp

Try putting the two values in Date variables and do this:

if(var1.valueOf() > var2.valueOf())
{
  //Do Something
}
Sidharth Panwar
A: 

Use Date.Parse() and then compare those 2 date objects with the available methods.

http://www.w3schools.com/jsref/jsref_parse.asp
http://www.w3schools.com/jsref/jsref_obj_date.asp

Fabian
+1  A: 

JavaScript's specified date/time parsing, what you can rely upon cross-browser, is surprisingly limited. For a long time, there was no single string date format that was mandated in the spec, and as of the recent 5th edition spec, the only mandated format is ISO-8601 (and some subsets). You can't yet rely on browsers having implemented that part of the 5th edition spec.

So you have a couple of choices:

  1. Parse the string yourself and use the Date constructor that takes the individual parts of the date as numbers, e.g. new Date(year, month, day, hour, minute, second, ...). (You need only specify as many of those as you want, so for instance new Date(2010, 9, 14) is September 14th, 2010.)

  2. Use a library like DateJS that's already done the work for you. DateJS accepts a lot of datetime formats.

T.J. Crowder
+1  A: 

I do not think that the standard implementation can parse this. I would do something like this:

function toDate(dateString) {
    var timeComponents = dateString.replace(/\s.*$/, '').split(':');

    if (dateString.indexOf("PM") > -1) {
       timeComponents[0] += 12;
    }

    var date = new Date();
    date.setHours(timeComponents[0]);
    date.setMinutes(timeComponents[1]);
    date.setSeconds(timeComponents[2]);

    return date;
}

if (toDate('06:30:47 AM') > toDate('01:10:47 PM')) {
    // ...
}
elusive
A: 

If your times are always in the format 00:00:00 AM then

var a="06:30:47 AM";
var b="01:10:47 PM";

var at=parseInt(a.substring(0,8).replace(/(^0+|:)/g,""));
var bt=parseInt(b.substring(0,8).replace(/(^0+|:)/g,""));

if (a.charAt(9)=="P") {at=at+120000};
if (b.charAt(9)=="P") {bt=bt+120000};

if (at<bt) {
    // a is smaller
}
else
{
    // a is not smaller
};

..should be cross-browser and time/format safe.

El Ronnoco
A: 

I tried something like this

var ts1="06:30:47 AM";

var ts2="01:10:47 PM";

var ds=new Date().toDateString();

var d1=new Date(ds+" "+ts1);

var d2=new Date(ds+" "+ts2);

if (!(d2>d1)){

alert("d1 should be less than d2");

}

Is there something wrong with this?

A: 
// specific formatter for the time format ##:##:## #M
var formatToMiliseconds = function(t){
    t = t.split(/[:\s]/);
    t = ((t[0] * 3600000) + (t[1] * 60000) * (t[2] * 1000)); // To ms
    t = t + (/PM/i.test(t[3]) ? 43200000 : 0); // adjust for AM/PM
    return t;
}

var time01 = formatToMiliseconds('06:30:47 AM');
var time02 = formatToMiliseconds('01:10:47 PM');

alert(time01 > time02); // false
allert(time01 < time02); // true

As a bonus, your time is now more compatible with the Date object and other time calculations.

BGerrissen