The 'GetValidDate()' function ensure that the month, day, and year integers provided are within the allowable month-day combinations for the particular year. This is ideal for validating a date input from a set of drop downs, where a user could select 'February 31, 2003'. Using 'mktime()' will translate those values to 'March 3,2003' which although valid may not be the desired behaviour. This function will determine the proper date without spilling over into the next month and return the timestamp created. A sample use is included. Try selecting 'February 30,2003', 'February 30,2004' and 'November 31,2005' for a clearer picture of what this function does.
By : wmfwlr
<?
//** ©William Fowler (wmfwlr@cogeco.ca)
//** January 26/2004, Version 1.0
//** Returns: Timestamp
//** Get the adjusted timestamp associated with the day, month, and year
//** given. Months and days are indexed starting at one (1). Any date before
//** January 1, 1970 will be converted to year 1970 (due to 'mktime()'
//** limitations).
function GetValidDate($month=1, $day=1, $year=1970)
{
//** provide a default value and convert the day of the month given. Day
//** cannot be less than 1 or greater than 31.
$day = min(31, max(1, intval($day)));
//** provide a default value and convert the month number given. Month cannot
//** be less than 1 or greater than 12.
$month = min(12, max(1, intval($month)));
//** provide a default value and convert the day of the year number given.
$year = max(1970, intval($year));
//** handle compensating for day runover if the number of days selected is
//** greater than those allowable for the selected month.
switch($month)
{
//** if FEBRUARY the selected day must be corrected and a leap year must be
//** acounted for as well.
//** CHANGED JAN 26/2004 - corrected for leap year error.
case 2 :
if($day > 28)
$day = ($year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)) ? 29 : 28;
break;
//** only maximum of thirty days in these months.
case 4 : //** APRIL
case 6 : //** JUNE
case 9 : //** SEPTEMBER
case 11 : //** NOVEMBER
$day = min(30, $day);
break;
}
//** construct the appropriate date timestamp from the parameters provided.
return mktime(0, 0, 0, $month, $day, $year);
}
?>
<html>
<body>
<form method="post">
<font face="verdana" size="2">
<i>Please choose a date:</i><br>
<select name="month">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<!-- generate a list of available days in a month, 1 to 31 -->
<select name="day">
<?
for($index=1; $index <= 31; $index++)
echo "<option value='$index'>$index</option>";
?>
</select>
<!-- generate a list of years to select -->
<select name="year">
<?
for($index=2000; $index <= 2025; $index++)
echo "<option value='$index'>$index</option>";
?>
</select>
<input type="submit" name="dodisplay" Value=" Validate "><br><br>
<!-- if this form was submitted display the date choosen. -->
<?
if(isset($_REQUEST["dodisplay"]))
{
echo "<i>You Choose:</i> <font color='blue'>",
date("F d, Y", GetValidDate($_REQUEST["month"],$_REQUEST["day"],$_REQUEST["year"])),
"</font> <i>(", "month=", $_REQUEST["month"], " day=", $_REQUEST["day"],
" year=", $_REQUEST["year"], ")</i>";
}
?>
</font>
</form>
</body>
</html>
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
More Miscellaneous Code Articles
More By Codewalkers
developerWorks - FREE Tools! |
Join this webcast, to learn how the Rational Process Library can help with compliance issues, drive process improvement, and assist in service-oriented architecture (SOA) or Agile development. We will take a peek into the Rational Process Library with content around software and systems engineering (including RUP), operations and systems management, program and portfolio management, and asset and SOA governance. FREE! Go There Now!
|
|
|
|
WebSphere Process Server delivers a unique integration framework that simplifies existing IT resources. Often, as IT assets grow to support business demand, so too does their complexity and manageability. In this webcast, we’ll discuss how WebSphere Process Server helps deliver an SOA infrastructure that provides a common model to orchestrate, mediate, connect, map, and execute the underlying IT functions. Discover how WebSphere Process Server simplifies integration of business processes by leveraging existing IT assets as reusable services without the complexities of traditional integration methodologies. FREE! Go There Now!
|
|
|
|
Join this webcast to see how IBM Data Studio Developer and pureQuery can take the pain out of Java data access. uApplications developed using both Java and SQL have become a common requirement. Database connectivity using Java Database Connectivity (JDBC) to create an application is a multi-step tedious process, and tooling that covers both SQL and Java has been unavailable, until now. IBM Data Studio introduces the pureQuery platform: a high-performance, Java data access platform focused on simplifying the tasks of developing, managing, and optimizing database applications and services. FREE! Go There Now!
|
|
|
|
Asset Reuse is a key strategy for companies looking to create innovative solutions to solve complex software development problems. Searching for, identifying, updating, using and deploying software assets can be a difficult challenge. Listen to this webcast, to learn about strategies and tools that you can leverage for a successful project, including Rational Asset Manager, Rational Software Architect and WebSphere Service Registry and Repository. FREE! Go There Now!
|
|
|
|
This webcast outlines the best practices that must be instituted to gain the maximum benefit from SOA while maintaining high quality of service. Whether you are deploying new applications or managing and monitoring your existing infrastructure, learn how you can ensure high quality of services with SOA based solutions from IBM. All registrants who attend this live Web Seminar will receive complimentary access to a white paper titled “Maintaining QoS in an SOA Environment”. FREE! Go There Now!
|
|
|
|
Join this Rational Talks to You teleconference on December 11 at 1:00 pm ET to get tips on building your own plugins with Rational Method Composer. Get your questions answered! FREE! Go There Now!
|
|
|
|
Get a free trial download of the latest version of IBM Rational Performance Tester V7.0.1, a load and performance testing solution for teams concerned about the scalability of their Web-based applications. Combining multiple ease-of-use features with granular detail, Rational Performance Tester simplifies the test-creation, load-generation and data-collection processes that help teams ensure the ability of their applications to accommodate required user loads. FREE! Go There Now!
|
|
|
|
Get a free trial download of the latest version of IBM Rational Tester for SOA Quality V7.0.1, a functional and regression testing tool that enables the creation, comprehension, modification and execution of testing GUI-less Web services. FREE! Go There Now!
|
|
|
|
In this webcast, you'll get an introduction to the eXtreme Transaction Processing (XTP) features of WebSphere Extended Deployment and the common architectural traits required by XTP applications. See how WebSphere Extended Deployment's ObjectGrid feature provides a state-of-the-art infrastructure for hosting XTP applications. FREE! Go There Now!
|
|
|
|
Join this webcast to learn how IBM Rational's Functional Testing solution enables you to implement automation your way, at your pace, with your existing staff. In this webcast, you’ll learn how you can eliminate redundancy of manual test scripts, reduce errors, and increase test coverage through test automation. After this presentation you will understand how IBM Rational Functional Testing solution can streamline your manual testing and make test automation easily attainable. FREE! Go There Now!
|
|
|
|
All FREE IBM® developerWorks Tools! |