DekGenius.com
Previous Section  < Day Day Up >  Next Section

C.8 Chapter 9

C.8.1 Exercise 1:

$stamp = mktime(19,45,0,10,20,2004);
print strftime('Today is day %d of %B and day %j of the year %Y. The time is %I:%M %p 
(also known as %H:%M).', $stamp);

C.8.2 Exercise 2:

$stamp = mktime(19,45,0,10,20,2004);
print 'Today is day '.date('d',$stamp).' of '.date('F',$stamp).' and day '.
(date('z',$stamp)+1);
print ' of the year '.date('Y',$stamp).'. The time is '.date('h:i A',$stamp);
print ' (also known as '.date('H:i',$stamp).').';

C.8.3 Exercise 3:

<?php
print '<table>';
print '<tr><th>Year</th><th>Labor Day</th></tr>';
for ($year = 2004; $year <= 2020; $year++) {
    // Get the timestamp for September 1 of $year
    $stamp = mktime(12,0,0,9,1,$year);
    // Advance to the first monday
    $stamp = strtotime('monday', $stamp);
    print "<tr><td>$year</td><td>";
    print date('F j', $stamp);
    print "</td></tr>\n";
}
print '</table>';
?>

C.8.4 Exercise 4:

<?php
require 'formhelpers.php';
// Set up arrays of months, days, years, hours, and minutes 
$months = array(1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 
                5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August',
                9 => 'September', 10 => 'October', 11 => 'November', 
                12 => 'December');
$days = array( );
for ($i = 1; $i <= 31; $i++) { $days[$i] = $i; }
$years = array( );
for ($year = date('Y') -1, $max_year = date('Y') + 5; $year < $max_year; $year++) {
    $years[$year] = $year;
}
if ($_POST['_submit_check']) {
    // If validate_form( ) returns errors, pass them to show_form( )
    if ($form_errors = validate_form( )) {
        show_form($form_errors);
    } else {
        // The submitted data is valid, so process it
        process_form( );
    }
} else {
    // The form wasn't submitted, so display
    show_form( );
}
function show_form($errors = '') {
    global $months, $days, $years;
    // If the form is submitted, get defaults from submitted variables
    if ($_POST['_submit_check']) {
        $defaults = $_POST;
    } else {
        // Otherwise, set our own defaults: one month from now
        $default_timestamp = strtotime('+1 month');
        $defaults = array('month' => date('n', $default_timestamp),
                          'day'   => date('j', $default_timestamp),
                          'year'  => date('Y', $default_timestamp));
        
    }
    // If errors were passed in, put them in $error_text (with HTML markup)
    if ($errors) {
        print 'You need to correct the following errors: <ul><li>';
        print implode('</li><li>',$errors);
        print '</li></ul>';
    }
    print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
    print 'Enter a date and time:';
    
    input_select('month',$defaults,$months);
    print ' ';
    input_select('day',$defaults,$days);
    print ' ';
    input_select('year',$defaults,$years);
    print '<br/>';
    input_submit('submit','Find Tuesdays');
    print '<input type="hidden" name="_submit_check" value="1"/>';
    print '</form>';
}
function validate_form( ) {
    global $months, $days, $years;
 
    $errors = array( );
   
    if (! array_key_exists($_POST['month'], $months)) {
        $errors[  ] = 'Select a valid month.';
    }
    if (! array_key_exists($_POST['day'], $days)) {
        $errors[  ] = 'Select a valid day.';
    }
    if (! array_key_exists($_POST['year'], $years)) {
        $errors[  ] = 'Select a valid year.';
    }
    // Make sure the submitted date is in the future
    // Find epoch timestamp for midnight today
    // Leaving off month, day, and year arguments make them
    // default to today
    $midnight = mktime(0,0,0);
    // Find epoch timestmap for midnight on the submitted date
    $midnight_submitted = mktime(0,0,0,$_POST['month'], $_POST['day'],
                                 $_POST['year']);
    if ($midnight_submitted <= $midnight) {
        $errors[  ] = 'Enter a date in the future.';
    }
                                 
    return $errors;
}
function process_form( ) {
    // Make an epoch timestamp for the user-entered date
    $midnight_submitted = mktime(0,0,0,$_POST['month'], $_POST['day'],
                                 $_POST['year']);
    // Get the epoch timestamp for the next Tuesday (including today,
    // if today is Tuesday.
    $timestamp = strtotime('tuesday');
    if ($timestamp >= $midnight_submitted) {
        print 'There are no Tuesdays between ';
        print date('l, F j, Y');
        print ' and ';
        print date('l, F j, Y.', $midnight_submitted);
    } else {
        while ($timestamp < $midnight_submitted) {
            // Print a formatted date string for $timestamp (which is a Tuesday)
            print date('l, F j, Y', $timestamp);
            print '<br/>';
            // Add a week to $timestamp
            $timestamp = strtotime('+1 week', $timestamp);
        }
    }
}
?>

    Previous Section  < Day Day Up >  Next Section