Improve company productivity with a Business Account.Sign Up

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

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
0
Rowby Goren
Asked:
Rowby Goren
  • 9
  • 5
  • 3
  • +1
3 Solutions
 
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
 
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
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.

 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 9
  • 5
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now