Solved

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

Posted on 2009-07-10
20
263 Views
Last Modified: 2012-05-07
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
Comment
Question by:Rowby Goren
  • 9
  • 5
  • 3
  • +1
20 Comments
 
LVL 39

Accepted Solution

by:
Roger Baklund earned 425 total points
Comment Utility
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
 
LVL 9

Assisted Solution

by:xBellox
xBellox earned 75 total points
Comment Utility
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
 
LVL 4

Expert Comment

by:khsater
Comment Utility
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
 
LVL 4

Expert Comment

by:khsater
Comment Utility
There we go. xBellox's method is much nicer than mine.
0
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
 
LVL 4

Expert Comment

by:khsater
Comment Utility
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
 
LVL 39

Expert Comment

by:Roger Baklund
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
 
LVL 39

Expert Comment

by:Roger Baklund
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 39

Expert Comment

by:Roger Baklund
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
 
LVL 9

Assisted Solution

by:xBellox
xBellox earned 75 total points
Comment Utility
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
 
LVL 9

Expert Comment

by:xBellox
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
Hi

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

Rowby
0
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
 
LVL 39

Expert Comment

by:Roger Baklund
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
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
 
LVL 9

Author Comment

by:Rowby Goren
Comment Utility
Never mind. I think the code is correct.

Let me double check.

Stay tuned.
0
 
LVL 9

Author Closing Comment

by:Rowby Goren
Comment Utility
Thanks all!
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
populate dynamic drop down from a csv 3 34
PHP loop not working 4 28
Help cleaning out CSS 2 17
sql sentence 2 6
Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
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…

763 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

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now