PHP Classes
elePHPant
Icontem

Calculating Periodical Events in PHP Part 1: The Problem Challenges - PHP Sweepstakes package blog

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  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 (2)   Trackbacks (0)  

Author: Dan Thanh

Posted on:

Package: PHP Sweepstakes

Sometimes it is necessary to calculate the days of periodical events, like for instance sweepstakes, contests, regular publications, etc..

In general, it is an easy problem to solve. However when the events span multiple days and must not occur in holidays, the problem becomes less trival to solve.

Read this article to learn how you can use the PHP Sweepstakes class to compute the days of regular event taking in account these nuances that may complicate the calculations.




Contents

Periodical Events

Events that Take Multiple Days

Time Wrap

Lazy Lists

Exception Dates

Conclusion


Introduction

There are many types of events that are repeated with regular intervals. That is the case of regular publications or contests like sweepstakes. That is why this class is called PHP Sweepstakes.

This article is about using this class to compute the dates of periodical events considering special conditions that make the computations more complicated.

Periodical Events

The problem we want to solve is of events that start at a specific date and repeat themselves after a specific number of days of the event cycle. Some events can also span through multiple days. In addition there may be days when the events needs to pause because the event day may happen to be in the holidays for instance.

This package can generate a lists of an unlimted number of dats of multiple recurring events that could span through multiple days.  

It can take a multidimensional array, that includes the start day, the range of the event days, the event cycle (weekly or monthly), as well a list of exceptions that may be holidays for instance.

The package can display the next and previous editions of each of the listed events.

Example screenshot magazines

Events that Take Multiple Days

The biggest problems with these calculations are that each event can start at a different day, can span multiple days, and all depends on the cycle of the event (weekly or monthly). 

For instance an event can start at on Monday, spans for 3 days and has a weekly cycle. Or another event starts at a Tuesday, spans 6 days and has a monthly cycle.

For simple events, we could use a cron job but cron is not that flexible to consider for instance exception days.

Using cron is also more difficult to adapt to certain applications needs. Cron considers the server time which often is not in the same time zone of users of the application. Thus we need to implement an algorithm in PHP that uses its date and time functions to consider all these details. 

Another limitation of cron is that it only considers the event start thus not considering that the event can span multiple days.

Time Wrap

Time specifications may exceed the 24 hours that each day take. For instance in Europe the time format uses 24:00 hours format. PHP treats 24:00 like I would expect. It should treat 37:00 by wrapping it into 13:00 tomorrow.

This kind of scheduling is seen frequently in radio and TV broadcast schedules, not only in Japan. But strtotime('24:00 today') is 0:00 whereas strtotime('24:00') and strtotime('today 24:00') are 0:00 tomorrow. PHP does not handle any time longer than 24:59:59.9 though. 

Because the date function can parse English text it is also important to know when a day starts and when it ends. Maybe the difference is very tiny and also using 24:00 and/or 37:00 for scheduling depends on the use case but it is important if you need to parse English text to a UNIX timestamp.

Lazy Lists

A greater problem is that the package can also list the current and the previous events. Although a an event repeats itself but the date are different. Basicaly it is the week number. 

This was a requirement because the date or time change. For instance the sweepstakes prizes may change and it is also necessary to list older sweepstakes.

Exception Dates 

Additionally, another challenge was the list of exceptions, for instance if the calculated day of the event is a holiday. The parameter array may specify multiple exceptions that are simply dates (timestamps).

Conclusion

As you may have read an apparently simple problem of calculation the dates of periodical events may become much more complicated once you need to consider events details like multiple day spans or exception dates like holidays.

On the next part of this article we will see how to use the PHP Sweepstakes package to solve a real world problem.

If you liked this article or have a question about the problem of calculating periodical events, post a comment here.


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

1,344,754 PHP developers registered to the PHP Classes site.
Be One of Us!

Login Immediately with your account on:

FacebookGmail
HotmailStackOverflow
GitHubYahoo


Comments:

1. When is the next part?? - Paul Okeke (2015-08-31 04:00)
Sounds good ... When will we see an example?... - 1 reply
Read the whole comment and replies




  Post a comment Post a comment   See comments See comments (2)   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...