Solved

Comparing two dates problem

Posted on 2007-04-09
9
259 Views
Last Modified: 2008-02-01
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.
0
Comment
Question by:RealSnaD
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 24

Expert Comment

by:glcummins
ID: 18876828
Can you show us the code you are using to make the comparison?
0
 
LVL 49

Expert Comment

by:Roonaan
ID: 18876963
You can create a unix timestamp and compare those.

-r-

0
 
LVL 7

Author Comment

by:RealSnaD
ID: 18877006
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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 50

Assisted Solution

by:Steve Bink
Steve Bink earned 50 total points
ID: 18877028
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
 
LVL 7

Author Comment

by:RealSnaD
ID: 18877089
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
 
LVL 49

Accepted Solution

by:
Roonaan earned 450 total points
ID: 18877102
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
 
LVL 50

Expert Comment

by:Steve Bink
ID: 18877438
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
 
LVL 7

Author Comment

by:RealSnaD
ID: 18877680
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
 
LVL 7

Author Comment

by:RealSnaD
ID: 18883129
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

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Popularity Can Be Measured Sometimes we deal with questions of popularity, and we need a way to collect opinions from our clients.  This article shows a simple teaching example of how we might elect a favorite color by letting our clients vote for …
Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

710 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question