Comparing two dates problem

Hi guys,

I have a field DATETIME in the database. I'm comparing values in that field to current date presented in the same format. When the current date is larger than the one in the database the error is supposed to pop up saying that the date is in the past. Everything works fine unless the database value is 2008-01-10 24:00:00. Or 24:01:00 - 24:59:00. In this case, it still says that the current date is larger than the database one but it's not. What can be the problem?

Thanks.
LVL 7
Yury MerezhkovDevelopment Team LeadAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

glcumminsCommented:
Can you show us the code you are using to make the comparison?
0
RoonaanCommented:
You can create a unix timestamp and compare those.

-r-

0
Yury MerezhkovDevelopment Team LeadAuthor Commented:
Code as follows:

      $day              = $_REQUEST["eventday"];
      $month        = $_REQUEST["eventmonth"];
      $year        = $_REQUEST["eventyear"];
      $hours        = $_REQUEST["eventhours"];
      $minutes        = $_REQUEST["eventminutes"];
      $ampm        = $_REQUEST["eventampm"];

        // Adjusting Entered Date
      if(strlen(trim($month)) == 1) {
            $month = "0".$month;
      }
      if(strlen(trim($day)) == 1) {
            $day = "0".$day;
      }
      if(strlen(trim($hours)) == 1) {
            $hours = "0".$hours;
      }
      if((trim($ampm) == "PM") && ($hours != 12)) {
            $hours += 12;
      } else if((trim($ampm) == "AM") && ($hours == 12)) {
            $hours += 12;
      }
      $eventDate    = $year."-".$month."-".$day." ".$hours.":".$minutes.":00";
      $currentDate  = strtotime(date("Y-m-d H:i:s", time()));
      //----------------------------

       if(strtotime($eventDate) <= $currentDate) {
            // Redirect to error page      
                   header("Location:/admin/?o=newevent&id=".$eventId."&r=e3");
       }
0
Learn Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

Steve BinkCommented:
You're going through a lot of trouble to reinvent a particular wheel.  Roonaan has already posted my strategy.  Change the db value to unix timestamp, build another unix timestamp from your post/get data, then compare.  Look here:

http://www.php.net/manual/en/function.mktime.php
http://www.php.net/manual/en/function.strtotime.php

0
Yury MerezhkovDevelopment Team LeadAuthor Commented:
What if I don't have the database at all? Yes, forget about the database. I get the date from user and I need to compare it to the current date. If the current date is larger I give an error saying the date you entered is in the past. My code works fine unless user enters 12:00 - 12:59 AM which is 24:00 - 24:59.
0
RoonaanCommented:
24:00 / 24:59 need just be converted to 0:00-0:59 on the next day.

You can get the current time using time() of mktime() or gmtime().
-r-
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Steve BinkCommented:
On the next day or the same day?  In any case, I still agree with Roonaan.  

If you haven't already, change your form to use <select> elements.  This would also allow for some simple javascript form validation...you can verify the date's validity before the user submits your form.
0
Yury MerezhkovDevelopment Team LeadAuthor Commented:
I don't like JS solutions in this case since user can have JS turned off and then it will cause other errors to show up. I'll try Roonaan's solution a bit later and let you guys know. Thanks.
0
Yury MerezhkovDevelopment Team LeadAuthor Commented:
All I had to do is to change this

else if((trim($ampm) == "AM") && ($hours == 12)) {
            $hours += 12;
}

to

else if((trim($ampm) == "AM") && ($hours == 12)) {
            $hours -= 12;
}

because it's supposed to be 00 not 24. Now it works fine and comparison is done correctly now. But thanks to u guys anyways.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
PHP

From novice to tech pro — start learning today.