working with time and calculations

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
rob1
Forum Newbie
Posts: 12
Joined: Mon Jul 28, 2008 10:05 am

working with time and calculations

Post by rob1 »

having never worked with time before on any projects i thought it wise to get some pointers before i make a start so i can avoid any common mistakes and pitfalls.

the project im working on is going to be a simple recording / billing system, where by i have a set number of task codes that i can bill against - all very simple stuff.

However, i have a "standard unit field" within my db billing table so certain tasks will be charged at different intervals.

ie "call out" rates might be charged in blocks of 15 minutes or 30 minutes, so if i enter in 18 minutes then it would automatically round up to the next "unit", which the next value would be 30 minutes (if that makes any sense?).

What would be easiest/best practise way of rounding up/storing these time increments, but also prevent historical data from change, so should i choose to increase/decrease my hourly rate ?
User avatar
lord_webby
Forum Commoner
Posts: 44
Joined: Wed Aug 19, 2009 9:01 am

Re: working with time and calculations

Post by lord_webby »

Code: Select all

<?php
$minutes = 18; //minutes you worked
 
switch ($minutes) {
    case (0 < $minutes < 15):
        $i ="0.25"; //quarter of an hour
        break;
    case (15 < $minutes < 30):
        $i = "0.5";
        break;
    case (30 < $minutes < 45):
        $i ="0.75";
        break;
    case (45 < $minutes < 60):
        $i ="1";
        break; 
}
 
$rate = "75"; //pounds per hour
$description = "Website work for Joe Bloggs";
$invoice_amount = $rate * $i;
$date = date("Y-m-d"); // "2009-08-21" <- mysql date format
?>
Then use a DB such as MySQL:

Code: Select all

 
INSERT INTO invoices (id, description, hours, rate, amount, date) 
VALUES (NULL, '$description', '$i', '$rate', '$invoice_amount', '$date');
That should get you started. But to be honest I'd use an excel spreadsheet. Accountants like to have spreadsheets. Although you could write an export to XLS (EXCEL) function for your data.
rob1
Forum Newbie
Posts: 12
Joined: Mon Jul 28, 2008 10:05 am

Re: working with time and calculations

Post by rob1 »

this is just part of a bigger project and the intention is to create a reporting section which will display the results on screen aswell as allow you to export it into another format - such as xls.

is there a easier or better way to make the code more clever so say i had the standard unit for a task code as 15 minute intervals, but should i want to increase these intervals to 30 minutes I would need to redo the code.

i had initially thought of someway to read the timestamps, maybe with end timestamp-starttime stamp in some way, but you have given me some ideas to help stimulate my thoughts.
User avatar
lord_webby
Forum Commoner
Posts: 44
Joined: Wed Aug 19, 2009 9:01 am

Re: working with time and calculations

Post by lord_webby »

Code: Select all

<?php
$minutes = 18; //minutes you worked
$interval = 15; //15 minutes
$d = "0.25" // interval in decimal form
switch ($minutes) {
    case (0 < $minutes < $interval):
        $i = $d; //quarter of an hour
        break;
    case ($interval < $minutes < ($interval * 2)):
        $i = ($d*2);
        break;
    case (($interval * 2) < $minutes < ($interval * 3)):
        $i = ($d*3);
        break;
    case (($interval * 3) < $minutes < ($interval * 4)):
        $i = ($d*4);
        break;
}
 
$rate = "75"; //pounds per hour
$description = "Website work for Joe Bloggs";
$invoice_amount = $rate * $i;
$date = date("Y-m-d"); // "2009-08-21" <- mysql date format
?>
User avatar
lord_webby
Forum Commoner
Posts: 44
Joined: Wed Aug 19, 2009 9:01 am

Re: working with time and calculations

Post by lord_webby »

If you want to expand on that you'll have to do it yourself, however. Personally I'd put it into a function and rearrange it to use a greater timescale. But the logic is there.
Post Reply