Drop down time selector - is there an "elegant" way to do it in php

Hello

I need to add a dropdown field for times of the day, similar to the one on this page:

http://www.avis.com/car-rental/avisHome/home.ac

I can create one the usual way with html.  But I am wondering if there is a "better" way to do it in php.

The times would be in this format (every half hour)  8:00 AM, 8:30:AM  9:00 AM   and at 12  it would be 12:00 PM, 12:30 PM.

Of course I can do it the usual html way, but I wouldn't mind finding out if there was a '"php way" :)

Thanks

....Rowby
LVL 9
Rowby GorenAsked:
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.

Roger BaklundCommented:
The "php way" would be to use a loop. Try this:
echo '<select name="time">';
for($i=0;$i<24*60;$i+=30) {
  $time = date('h:i A',mktime($i/60,$i%60,0));
  echo '<option value="'.$time.'">'.$time.'</option>'; 
}
echo '</select>';

Open in new window

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
xBelloxCommented:
Here is it, simply and clean:

<select name="hours">
<?	
    $time = strtotime("00:00:00");	
    for ($i=00;$i<1440;$i+=30) {
		$display = date("h:i A", strtotime("+ $i minutes", $time));
		echo "<option value='$display'>$display</option>";
    }
?>
</select>

Open in new window

0
khsaterCommented:
Attached is a relatively simple way to do it, but it could probably be shortened by someone who knows more functions than I do.  I can already think of a quicker way using a 24-hour system and checking if the number is more than 12, but it's not going to be much faster.
print '<option value="12:00a">12:00 A.M.</option>';
for($i = 1; $i<12 $i++){
   print '<option value="'.$i.':00a">'.$i.':00 A.M.</option>';
   print '<option value="'.$i.':30a">'.$i.':30 A.M.</option>';
}
print '<option value="12:00p">12:00 P.M.</option>';
for($i = 1; $i<12 $i++){
   print '<option value="'.$i.':00p">'.$i.':00 P.M.</option>';
   print '<option value="'.$i.':30p">'.$i.':30 P.M.</option>';
}

Open in new window

0
Exploring SharePoint 2016

Explore SharePoint 2016, the web-based, collaborative platform that integrates with Microsoft Office to provide intranets, secure document management, and collaboration so you can develop your online and offline capabilities.

khsaterCommented:
There we go. xBellox's method is much nicer than mine.
0
Rowby GorenAuthor Commented:
Thanks all.

I am going to have "two" time drop downs in the forms.

Do I have to give each one an unique name or unique identifiers.

For example

Drop off your vehicle time:

Pick up your vehicle time:

Thanks

Rowby
0
khsaterCommented:
You should give each one a unique name and a unique id.  The name so that the submitted values can be differentiated and the id so that they're not confused by the browser.
0
Roger BaklundCommented:
You could do like this:
function TimeDropdown($name) {
  $res = '<select name="'.$name.'">';
  for($i=0;$i<24*60;$i+=30) {
    $time = date('h:i A',mktime($i/60,$i%60,0));
    $res .= '<option value="'.$time.'">'.$time.'</option>';  
  }
  $res .= '</select>';
  return $res;
}
echo TimeDropdown('drop_off_time');
echo TimeDropdown('pick_up_time');

Open in new window

0
Rowby GorenAuthor Commented:
Hi cxr,

I used the below code.  

Please check the result.  

http://www.avrparking.com/test2.html

Any suggestions?

Thanks

function TimeDropdown($name) {
  $res = '<select name="'.$name.'">';
  for($i=0;$i<24*60;$i+=30) {
    $time = date('h:i A',mktime($i/60,$i%60,0));
    $res .= '<option value="'.$time.'">'.$time.'</option>';  
  }
  $res .= '</select>';
  return $res;
}
echo TimeDropdown('drop_off_time');
echo TimeDropdown('pick_up_time');

Open in new window

0
Roger BaklundCommented:
You must sorround it with PHP tags:

<?php
  (php code here)
?>

You can (should) have three different php tags, first define the function, then put these where you want them in the form:

<?php echo TimeDropdown('drop_off_time'); ?>

<?php echo TimeDropdown('pick_up_time'); ?>

Your page has .html extension, normally you would need .php extension for the server to render PHP code, but this depends on the server configuration.
0
Rowby GorenAuthor Commented:
Would this be correct?
<?php 
function TimeDropdown($name) {
  $res = '<select name="'.$name.'">';
  for($i=0;$i<24*60;$i+=30) {
    $time = date('h:i A',mktime($i/60,$i%60,0));
    $res .= '<option value="'.$time.'">'.$time.'</option>';  
  }
  $res .= '</select>';
  return $res;
}
<?php echo TimeDropdown('drop_off_time'); ?>
<?php echo TimeDropdown('pick_up_time'); ?>	
?>

Open in new window

0
Roger BaklundCommented:
No. You can not nest PHP tags. Split it in three parts: first the function within one set of PHP tags, then the two TimeDropdown() calls, each in its own PHP tags, placed where you want them in the HTML form.
<?php 
function TimeDropdown($name) {
  $res = '<select name="'.$name.'">';
  for($i=0;$i<24*60;$i+=30) {
    $time = date('h:i A',mktime($i/60,$i%60,0));
    $res .= '<option value="'.$time.'">'.$time.'</option>';  
  }
  $res .= '</select>';
  return $res;
}
?>
<form ... >
<?php echo TimeDropdown('drop_off_time'); ?>
(more form fields)
<?php echo TimeDropdown('pick_up_time'); ?>     
</form>

Open in new window

0
Rowby GorenAuthor Commented:
Working nicely. (I need to style it but it's working.

http://www.avrparking.com/test2.html

What field would I use for the form results?    I assume "drop_off_time" and "pick_up_time" ?  

I tried using the form but the date fields did not show up in the emailed form results.  OR is that something beyond the scope of this question -- for another Experts Exchange area?

Also (but it is not essential) is there a way to remove the "0" from times such as "09:30am"?

Rowby


0
xBelloxCommented:
To change the zero leading hour to as "9:30 am", change the "h" to "g"  at line:

$time = date('g:i A',mktime($i/60,$i%60,0));

Open in new window

0
xBelloxCommented:
I saw in your test2.html that the two select input has tha same name: "drop_off_time". I think this may be the problem. And yes, normally the name of the variable should be $_POST["drop_off_time"] and $_POST["pick_up_time"] (or $drop_off_time and $pick_up_time if your server has the option "safe_mode"set to off).
0
Rowby GorenAuthor Commented:
Hi

I have to go to some meethings but will resume later.  Looks like all is gonna work fine!

Rowby
0
Rowby GorenAuthor Commented:
Hi xBellox:

Working very nice.  
http://avrparking.com/test2.html

One final question.

Can I add some code that will start the time at, say 8:00 am and end the time at say 10:00pm

Thanks

Rowby
0
Roger BaklundCommented:
Just change the start and end time in the for loop, like this:

  for($i=8*60;$i<=22*60;$i+=30) {

22 == 10:00pm
0
Rowby GorenAuthor Commented:
I'm getting close but not quite there

The below code gives me a start time of 10:00 AM and an end time of 10:00 AM.

http://avrparking.com/test2.html

Rowby
<?php 
function TimeDropdown($name) {
  $res = '<select name="'.$name.'">';
   for($i=10*60;$i<=22*60;$i+=30) {
    $time = date('g:i A',mktime($i/60,$i%60,0));
    $res .= '<option value="'.$time.'">'.$time.'</option>';  
  }
  $res .= '</select>';
  return $res;
}
?>

Open in new window

0
Rowby GorenAuthor Commented:
Never mind. I think the code is correct.

Let me double check.

Stay tuned.
0
Rowby GorenAuthor Commented:
Thanks all!
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.