Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 185
  • Last Modified:

determine all the dates between a start and end date.

I am trying to build a form (using PHP) and would like to have a start date (entered as 3 fields - startMonth, startDay, and startYear) and an end date (entered as 3 fields - endMonth, endDay, endYear).
If they pick the same day for both I am ok, but if the end date is  3 days later I have to figure what dates are in between.

Example 12/20/2003 - 12/23/2003, would have 12/20/2003 and 12/21/2003, and 12/22/2003, and 12/23/2003. (4 dates)

I am pretty new to programming, so an example would be helpful.

Thanks
0
James Stone
Asked:
James Stone
  • 2
1 Solution
 
lozlozCommented:
<?
if(!checkdate($_POST["startMonth"],$_POST["startDay"],$_POST["startYear"])) {
  die("Start date invalid");
}
if(!checkdate($_POST["endMonth"],$_POST["endDay"],$_POST["endYear"])) {
  die("end date invalid");
}
$startdate = mktime(0,0,0,$_POST["startMonth"],$_POST["startDay"],$_POST["startYear"]);
$enddate = mktime(0,0,0,$_POST["endMonth"],$_POST["endDay"],$_POST["endYear"]);
if($enddate < $startdate) {
  die("End date precedes start date");
}
$distance = $enddate - $startdate;
$distance = $distance / 60 / 60 / 24;
$distance = floor($distance);
?>

$distance should result in the number of days between them, tell me how you get on
0
 
James Stonewarehouse managerAuthor Commented:
What I was missing was looping it through a mktime statement  x number of  times, finally came to me!

first time I had seen floor function so read up on that.

Thanks for the comment - eventually I will figure this stuff out.

<?

$distance = $distance / 60 / 60 / 24;
$distance = floor($distance);
echo $distance."<p>";

//
// loop through the days
$range = range (0, $distance);

foreach ($range as $value) {
        $Rangetimestamps = mktime(0,0,0,$_POST["Startmonth"],($_POST["Startday"]+$value),$_POST["Startyear"]);
        $RangeDates = date("mdy", $Rangetimestamps);
        //echo $Rangetimestamps. " and ".$value."<p>";
        echo $RangeDates."<p>";

}
?>
0
 
snoyes_jwCommented:
going with lozloz's initial range checking and assignments using mktime, here's another way to loop through the dates which I think might be a little more readable when you come back to do some debugging:

while ($startdate <= $enddate)
{
    echo date("mdy", $startdate);
    $startdate = strtotime("+1 day", $startdate);
}
0
 
James Stonewarehouse managerAuthor Commented:
Thanks, I am teaching my self php (I've worked with databases for a few years). The less typing the better! It is much easier to read and probably more efficient too.

Just realized I never gave lozloz his points for helping.

james
0

Featured Post

Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now