Home Articles FAQs XREF Games Software Instant Books BBS About FOLDOC RFCs Feedback Sitemap
irt.Org
#

Q1430 How can you compare today's date with a date in a string, then respond wether the string date is ahead, the same, or behind today's date?

You are here: irt.org | FAQ | JavaScript | date | Q1430 [ previous next ]

The following was submitted by Richard Norman

I needed a script which compared today's date and returned a value I could use in a conditional statement. I found the script in Q16 - How can I compare a date in a string with todays date?, but there was a problem, I needed to know wether it was ahead or behind as well as just today. Also, I discovered that when I ran the script listed there, it was not Year 2000 Compliant.

What I ended up doing was modifying the script so that not only could you have a more varied type of input to the function (I added 3 new types), but also I allowed for the Y2K, Y3K, Y4K, etc. problem.

This function is a simple adaptation of the previous function in that it compares the date variables directly and returns a -1 if the date in the string is behind today's date, 0 if it is the same as today's date or the datetype is out of range, and a 1 if it is beyond today's date.

<script language="JavaScript"><!--
function DatePosition(dateString,dateType) {
/*
   function DatePosition
   parameters: dateString dateType
   returns: integer (-1, 0, 1)

   dateString is a date passed as a string in the following
   formats:

   type 1 : 19970529
   type 2 : 970529
   type 3 : 29/05/1997
   type 4 : 29/05/97
   type 5 : 05/29/1997
   type 6 : 05291997
   type 7 : 052997

   dateType is a numeric integer from 1 to 7, representing
   the type of dateString passed, as defined above.

   Returns -1 if the date passed is behind todays date
   Returns 0 if the date passed is equal to todays date
   or if dateType is not 1 to 7
   Returns 1 if the date passed is ahead of todays date

   Added Y2K checking.  (Works for any century cross over)
*/


    var now = new Date();
    var today = new Date(now.getYear(),now.getMonth(),now.getDate());
    var century = parseInt(now.getYear()/100)*100;

    if (dateType == 1)
        var date = new Date(dateString.substring(0,4),
                            dateString.substring(4,6)-1,
                            dateString.substring(6,8));
    else if (dateType == 2)
    {
        if ((now.getYear()%100)>=parseInt(dateString.substring(0,2)))
        {
            var date = new Date(century+parseInt(dateString.substring(4,6)),
                            parseInt(dateString.substring(2,4)-1),
                            dateString.substring(4,6));
        }
        else
        {
            var date = new Date(century-100+parseInt(dateString.substring(0,2)),
                            parseInt(dateString.substring(2,4)-1),
                            dateString.substring(4,6));
        }

    }
    else if (dateType == 3)
        var date = new Date(dateString.substring(6,10),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));
    else if (dateType == 4)
    {
        if ((now.getYear()%100)>=parseInt(dateString.substring(6,8)))
        {
            document.write(century+parseInt(dateString.substring(6,8)),'<P>');
            var date = new Date(century+parseInt(dateString.substring(4,6)),
                            parseInt(dateString.substring(3,5)-1),
                            dateString.substring(0,2));
        }
        else
        {
            document.write(century-100+parseInt(dateString.substring(6,8)),'<P>');
            var date = new Date(century-100+parseInt(dateString.substring(4,6)),
                            parseInt(dateString.substring(3,5)-1),
                            dateString.substring(0,2));
        }

    }
    else if (dateType == 5)
        var date = new Date(dateString.substring(6,10),
                            dateString.substring(0,2)-1,
                            dateString.substring(3,5));
    else if (dateType == 6)
        var date = new Date(dateString.substring(4,8),
                            dateString.substring(0,2)-1,
                            dateString.substring(2,4));
    else if (dateType == 7)
    {
        if ((now.getYear()%100)>=parseInt(dateString.substring(4,6)))
        {
            document.write('datestring Century:',century+parseInt(dateString.substring(4,6)),'<P>');
            var date = new Date(century+parseInt(dateString.substring(4,6)),
                            parseInt(dateString.substring(0,2)-1),
                            dateString.substring(2,4));
        }
        else
        {
            document.write('datestring Century:',century-100+parseInt(dateString.substring(4,6)),'<P>');
            var date = new Date(century-100+parseInt(dateString.substring(4,6)),
                            parseInt(dateString.substring(0,2)-1),
                            dateString.substring(2,4));
        }

    }
    else
        return false;

    if (date < today)
    {
        document.write(date.toString(),' is behind ',today.toString(),'<P>');
        return -1;
    }
    else if (date > today)
    {
        document.write(date.toString(),' is ahead of ',today.toString(),'<P>');
        return 1;

    }
    else
    {
        document.write(date.toString(),' is the same as ',today.toString(),'<P>');
        return 0;
    }
}

//-->
</script>

<script language="JavaScript"><!--
document.writeln(DatePosition('041500',7));
//--></script>

Feedback on 'Q1430 How can you compare today's date with a date in a string, then respond wether the string date is ahead, the same, or behind today's date?'

©2018 Martin Webb