PHP Classes
elePHPant
Icontem

Calculating Periodical Events in PHP Part 2: Solving a Real World Problem - PHP Sweepstakes package blog

Recommend this page to a friend!
  All package blogs All package blogs   PHP Sweepstakes PHP Sweepstakes   Blog PHP Sweepstakes package blog   RSS 1.0 feed RSS 2.0 feed   Blog Calculating Periodica...  
  Post a comment Post a comment   See comments See comments (0)   Trackbacks (0)  

Author: Chi Hoang

Posted on:

Package: PHP Sweepstakes

In the first part of this article it was covered the problem of computing the dates of periodical events and nuances that can make the solution more complicated.

Read this article to learn how to use the PHP Sweepstakes package to solve a real world example of the problem.




Contents

A Real World Problem

The Implementation Algorithm

The PHP Date Functions

Example Tutorial

Creating the Class Object

Changing to the User Time Zone

Installation

The Complete Example Code

Example package output

Conclusion


A Real World Problem

To demonstrate how to solve the scheduling problems, nothing like a real world example. For instance a weekly and/or monthly distributed magazine that also organizes regular sweepstakes, such as word game where you have to answer test questions with multiple choice answers.

The reader then can use the browser and navigate to the page that uses this package and choose his magazine to enter the winning word along with his personal data to participate to the sweepstakes.

The package shows all the current sweepstakes and also the previous sweepstakes, so that the reader can participate on the sweepstakes a week or a month later.

Example of periodical magazines

This image shows an example screenshot. In the first row all the magazines from the 35 week of the year and in the second row all the magazines from the 34 week of the year.

The Implementation Algorithm

It uses an algorithm that simply loops over the given range of days starting from a given day. Then it compares each day with each sweepstakes to find the right sweepstakes. So, it is all gathered in two loops.

The PHP Date Functions

The exact calendar (time and date) calculations are very difficult. Fortunately PHP offers several functions, like for instance strtotime(), mktime(), date() and DateTime(), that help the developers to solve problems like this.

For instance the mktime() function can return the current timestamp or any other timestamp. This is useful to change the reference time of the programming system or testing server.

The date() function can return the day of the week, the week number and the month number. For instance date("D") returns the day of the week and it is useful because the sweepstakes starts at specific day.

The DateTime() function is useful to return the UNIX timestamp with respect to the users time zone. For instance echo $d->modify("monday this week") returns the UNIX timestamp of the monday of this week. The method modify() is needed because the DateTime() functions needs a UNIX timestamp to initialize the class object similar to a seed for a random generator.

The PHP date functions can also parse english text to unix timestamp. For instance strtotime('14:00 today');

Basically these 4 php functions are needed to change the reference clock of the user system needed for testing and also for production without actually change the time of the server operating system.

Example Tutorial

The package takes a multidimensional array as input. The array holds the title, a unique ID, the start day (not to confuse with the start of package), the period cycle (weekly or monthly), the duration of the sweepstakes (currently it can be 3 day, 6 day or a month).
array(
"title" => "Sweepstake 1",
"uid" => "1",
"day" => "2",
"cycle" => "0",
"end" => "0",
"table" => array( array
(
"ST" => "18 December",
"SD" => 1355785200,
),
array
(
"ST" => "24 December",
"SD" => 1356303600,
),
array
(
"ST" => "2 October",
"SD" => 1349128800,
)
)
)

In addition there is the table array that holds the list of exceptions which is simply a date (timestamp). An event can then be saved with many other events together to feed the main function.

Creating the Class Object

To compute the events create an object and feed it with the array of events and the range of the days to list:
$s = new sweepstake();
$result = $s->main($table,31);
echo $result;

Changing to the User Time Zone

You can change the timezone the match the current timezone by changing the main.php file and the date_default_timezone_set('Europe/Berlin') function.

Installation

The PHP Sweepstakes package requires PHP 5.3 or later. Download the package from phpclasses.org and save the files to where you can include the file main.php.

The Complete Example Code

require ("main.php");
 
$table = array( 

 array( 
  "title" => "Sweepstake 1", 
  "uid" => "1", 
  "day" => "2", 
  "cycle" => "0", 
  "end" => "0", 
  "table" => array(

   array 
   ( 
    "ST" => "18 December", 
    "SD" => 1355785200, 
   ),

   array 
   ( 
    "ST" => "24 December", 
    "SD" => 1356303600, 
   ),
 
   array 
   ( 
    "ST" => "2 October", 
    "SD" => 1349128800, 
   )

  ) 
 )
);

$s = new sweepstake(); 

$result=$s->main($table,31); 

echo $result; 

Example package output

Package output

In the example package output above you can see 5 weekly sweepstakes magazines and 1 monthly sweepstake magazine at the start day 1.

You can also see new and old issues when new is the current week and old is the previous week. In day 3 you can see old is empty because the participation on the sweepstake magazine is terminated and/or the magazine is not available anymore.

Conclusion

The PHP Sweepstakes package makes much simpler the calculation of periodical events when you have more complicated factors to take in account, like multiple days span or exception days like holidays.

If you like this article or have a question about to use this class to solve the problem of scheduling periodical events, post a comment to this article.




You need to be a registered user or login to post a comment

Login Immediately with your account on:

FacebookGmail
HotmailStackOverflow
GitHubYahoo


Comments:

No comments were submitted yet.




  Post a comment Post a comment   See comments See comments (0)   Trackbacks (0)  
  All package blogs All package blogs   PHP Sweepstakes PHP Sweepstakes   Blog PHP Sweepstakes package blog   RSS 1.0 feed RSS 2.0 feed   Blog Calculating Periodica...