user517406
user517406

Reputation: 13773

javascript check end date is greater than or equal to start date

Is it possible to check whether an end date is greater than or equal to a start date in Javascript? My dates are strings in the format 'dd/mm/yyyy'.

Upvotes: 8

Views: 56640

Answers (10)

murli2308
murli2308

Reputation: 3004

Just convert the string to date and use getTime method of Date object to compare it.

Example code

var startDate = '04/04/2015'; //date in dd/mm/yyyy format
var endDate = '05/04/2015';

function compareDates(sDate, eDate) {
    var dateTime1 = new Date(sDate).getTime(),
        dateTime2 = new Date(eDate).getTime();
  var diff = dateTime2 - dateTime1;
  if (diff > 0) {
    alert("endDate is greater than startDate");
    return true;
  } 
}
compareDates(startDate, endDate);

Working Fiddle

Upvotes: 0

Gaʀʀʏ
Gaʀʀʏ

Reputation: 4540

Took me some time to find, but JQuery implements this exact functionality with DatePicker date-range. (Source code available in link as well.)

Moment.js also handles date comparisons very well using the diff function.

Upvotes: 1

Richard Christensen
Richard Christensen

Reputation: 2166

Most simple way to do this.

function endAfterStart(start, end) {
    var startDate = new Date(start);
    var endDate   = new Date(end);

    return endDate.getTime() >= startDate.getTime();
} 

Upvotes: 5

lak
lak

Reputation: 1

if (iForm.DiddfromDate.value == "") 
  { 
    alert("  Please enter a value");  
    iForm.DiddfromDate.focus(); 
    return false;    
  }
     if (iForm.DiddtoDate.value == "") 
  { 
    alert("  Please enter a  value");  
    iForm.DiddtoDate.focus(); 
    return false;    
  }      
        try {
            var d1 = iForm.DiddfromDate.value.substr(0, 2);
            var m1 = iForm.DiddfromDate.value.substr(3, 2);
            var y1 = iForm.DiddfromDate.value.substr(6, 4);
            var StrDate = m1 + "/" + d1 + "/" + y1;

            var d2 = iForm.DiddtoDate.value.substr(0, 2);
            var m2 = iForm.DiddtoDate.value.substr(3, 2);
            var y2 = iForm.DiddtoDate.value.substr(6, 4);
            var EndDate = m2 + "/" + d2 + "/" + y2;

            var startDate = new Date(StrDate);
            var endDate = new Date(EndDate);
            if (startDate > endDate) {
                alert('To date should be greater than From date.');
                iForm.DiddfromDate.value = '';
                iForm.DiddtoDate.value = '';
                iForm.DiddfromDate.focus();
                return false;
            }
        } catch (e) { alert(e.Description); }
 return true;

Upvotes: 0

JamesN
JamesN

Reputation: 387

First use this function will convert string to Date type in js:

function common_getDateFromUI(str) {
    var arr = str.split("/");
    var returnDate = new Date(arr[2], arr[1] - 1, arr[0], 0, 0, 0, 0);
    return returnDate;
}

Second: after you get the javascript date type, you just compare it as normal type like date1 > date2 or date1 == date2.
Or use this function to get the difference date between date:

function CalendarDays(startDate, endDate) {
    if (endDate < startDate)
        return 0;

    // Calculate days between dates
    var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
    startDate.setHours(0, 0, 0, 1); // Start just after midnight
    endDate.setHours(23, 59, 59, 999); // End just before midnight
    var diff = endDate - startDate; // Milliseconds between datetime objects
    var days = Math.round(diff / millisecondsPerDay);

    return days;
}

Follow this link is a simple demo to get difference days between dates. Link demo here

Upvotes: 0

razor
razor

Reputation: 173

function isDate(value)
            {
                var fromDate = document.getElementById("fromDate").value
                var toDate= document.getElementById("toDate").value
                //var curr_Date= new SimpleDateFormat("dd/mm/yyyy");


            var dateRegEx = null;
            dateRegEx = new RegExp(/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g);

            if (dateRegEx.test(fromDate)){
            }
            else{
                alert("Invalid from date");
                return false;
            }
            dateRegEx = new RegExp(/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g);
            if(dateRegEx.test(toDate)) {
            }
            else{
                alert("Invalid to date");
                return false;
            }
            var stDate = new Date(fromDate);
            var enDate = new Date(toDate);
            var compDate = enDate - stDate;
            //var fdate=enDate-curr_Date;

            if(compDate >= 0)
                return true;
            else 
            {
                alert("To Date cannot be smaller than From Date");
                return false;
            }




            /**/
        }

This will work for Leap years also..in dd/mm/yyyy format(not any other format).

Upvotes: 1

user2060679
user2060679

Reputation:

Try this,

function isDateCompare(){

var leadDate = document.getElementById('strDate').value;

var closeDate = document.getElementById('strDateClosed').value;

var date1 = new Date();

date1.setFullYear(leadDate.substr(6,4),(leadDate.substr(3,2)-1),leadDate.substr(0,2));

var date2 = new Date();

date2.setFullYear(closeDate.substr(6,4),(closeDate.substr(3,2)-1),closeDate.substr(0,2));

if (date1> date2)
{

alert("Expected Closed date cannot be less than Lead date.");

return false;

}

else
{

alert("true");

return false;

}

}

Upvotes: 0

KooiInc
KooiInc

Reputation: 122906

If the string format ('dd/mm/yyyy') doesn't change, this function should work:

function endAfterStart(start,end){
  return new Date(start.split('/').reverse().join('/')) <
          new Date(end.split('/').reverse().join('/'));
}
alert(endAfterStart('05/01/2011','09/01/2011')); //=> true

Or extend the Date.prototype:

Date.prototype.isBefore = Date.prototype.isBefore || function(dat){
   return this < dat;
}
new Date('05/01/2011'.split('/').reverse().join('/'))
   .before( new Date('09/01/2011'.split('/').reverse().join('/')) );  //=>true

Upvotes: 4

niksvp
niksvp

Reputation: 5563

try this

var startDate = "05/01/2011";
var endDate = "09/01/2011";
var regExp = /(\d{1,2})\/(\d{1,2})\/(\d{2,4})/;
if(parseInt(endDate.replace(regExp, "$3$2$1")) > parseInt(startDate.replace(regExp, "$3$2$1"))){
alert("greater");
}

Upvotes: 12

developer
developer

Reputation: 9478

check out this function

function CompareDates() 
{ 
var str1 = document.getElementById("Fromdate").value; 
var str2 = document.getElementById("Todate").value; 
var dt1  = parseInt(str1.substring(0,2),10); 
var mon1 = parseInt(str1.substring(3,5),10); 
var yr1  = parseInt(str1.substring(6,10),10); 
var dt2  = parseInt(str2.substring(0,2),10); 
var mon2 = parseInt(str2.substring(3,5),10); 
var yr2  = parseInt(str2.substring(6,10),10); 
var date1 = new Date(yr1, mon1, dt1); 
var date2 = new Date(yr2, mon2, dt2); 

if(date2 < date1) 
{ 
    alert("To date cannot be greater than from date"); 
    return false; 
} 
else 
{ 
    alert("Submitting ..."); 
    document.form1.submit(); 
} 
} 

Upvotes: 0

Related Questions