## Restzeiten mit PHP berechnen (OOP)

Da mir zur Zeit extrem langweilig ist, habe ich mich an eine Klasse zur Berechnung von Zeitunteschieden (Restzeit ;)) gemacht. Sie ist nicht die beste, hat aber die wichtigsten Funktionen eingebaut. Die Parameter sollten selbsterklärend sein….

resttime.class.php

```define("SECONDS_PER_MINUTE", 60);
define("SECONDS_PER_MINUTE", 60);
define("SECONDS_PER_HOUR", SECONDS_PER_MINUTE*60);
define("SECONDS_PER_DAY", SECONDS_PER_HOUR*24);
define("SECONDS_PER_MONTH", SECONDS_PER_DAY*30);
define("SECONDS_PER_WEEK", SECONDS_PER_DAY*7);
define("SECONDS_PER_YEAR", SECONDS_PER_MONTH*12);

/**
Klasse zur Berechnung von Restzeiten
*/
class resttime
{
private \$start_timestamp;         //start of the period
private \$end_timestamp; 		    //end of the period
private \$difference;              //difference between start and end
private \$rest;                    //temporary variable for calculations
private \$days;                    //amount of days
private \$hours; 					//amount of hours
private \$minutes; 				//amount of minuts
private \$seconds;					//amount of seconds
private \$years;					//amount of years
private \$months;					//amount of months
private \$weeks;					//amount of weeks

/**
Constructor initializes properities
*/
public function __construct(\$start = 0, \$end = 0)            //Start and end can be defined in the constructor (it's no must)
{
\$this->start_timestamp  = 0;
\$this->end_timestamp    = 0;
\$this->difference       = 0;
\$this->rest 		    = 0;
\$this->days 			= 0;
\$this->hours 			= 0;
\$this->minutes 			= 0;
\$this->seconds 			= 0;
\$this->years 			= 0;
\$this->months           = 0;
\$this->weeks 			= 0;

/**
That's the default value, wich can be changed by calling \$class->set_timezone()
*/
\$this->set_timezone("Europe/Berlin");

/**
To ensure that a start is defined in any case, set_start is called
*/
\$this->set_start(\$start);

/**
To ensure that a end is defined in any case, set_end is called
*/
\$this->set_end(\$end);
}

/**
Destructor deletes the variables
*/
public function __destruct()
{
unset(\$this->start_timestamp);
unset(\$this->end_timestamp);
unset(\$this->difference);
unset(\$this->rest);
unset(\$this->days);
unset(\$this->hours);
unset(\$this->minutes);
unset(\$this->seconds);
unset(\$this->years);
unset(\$this->months);
unset(\$this->weeks);
}

/**
This function is only used when this class has to work with a date, wich is no timestamp
*/
public function set_timezone(\$zone)
{
date_default_timezone_set(\$zone);
}

/**
Sets the beginning of the time to calculate
*/
public function set_start(\$timestamp)
{
if(is_numeric(\$timestamp)) //no datetime, so there's no need to convert the date to a timestamp
{
\$this->start_timestamp = \$timestamp;
}
else
{
\$this->start_timestamp = strtotime(\$timestamp);	//convert the date to a timestamp
}
\$this->calculate_difference();                   //update the difference in this object
}

/**
Returns a timestamp
*/
public function get_start()
{
return \$this->start_timestamp;
}

/**
Sets the end of the time to calculate
*/
public function set_end(\$timestamp)
{
if(is_numeric(\$timestamp)) //no datetime, so there's no need to convert the date to an timestamp
{
\$this->end_timestamp = \$timestamp;
}
else
{
\$this->end_timestamp = strtotime(\$timestamp);	//convert the date to a timestamp
}
\$this->calculate_difference();                   //update the difference in this object
}

/**
Returns a timestamp
*/
public function get_end()
{
return \$this->end_timestamp;
}

/**
This private function calculates the difference between the end and the start of the period
*/
private function calculate_difference()
{
\$this->difference = \$this->end_timestamp - \$this->start_timestamp;
}

/**
Returns the calculated difference as integer (in seconds)
*/
public function get_difference()
{
return (int)\$this->difference;
}

/**
Returns the calculated difference as an array / a string
*/
public function get_difference_formated(\$array 	= true,
\$year		= array(true, true),       //1. parameter means: Yes, i want to have it
\$month	= array(true, true),       //2. parameter means: Yes, i want to have it even when it's zero
\$week		= array(true, true),
\$day		= array(true, true),
\$hour		= array(true, true),
\$minute	= array(true, true),
\$second	= array(true, true))
{
\$this->rest = \$this->difference;
if(\$year == true)
{
\$this->years = floor(\$this->rest / SECONDS_PER_YEAR);
\$this->rest = \$this->rest - (\$this->years * SECONDS_PER_YEAR);
}

if(\$month == true)
{
\$this->months = floor(\$this->rest / SECONDS_PER_MONTH);
\$this->rest = \$this->rest - (\$this->months * SECONDS_PER_MONTH);
}

if(\$week == true)
{
\$this->weeks = floor(\$this->rest / SECONDS_PER_WEEK);
\$this->rest = \$this->rest - (\$this->weeks * SECONDS_PER_WEEK);
}

if(\$day == true)
{
\$this->days = floor(\$this->rest / SECONDS_PER_DAY);
\$this->rest = \$this->rest - (\$this->days * SECONDS_PER_DAY);
}

if(\$hour == true)
{
\$this->hours = floor(\$this->rest / SECONDS_PER_HOUR);
\$this->rest = \$this->rest - (\$this->hours * SECONDS_PER_HOUR);
}

if(\$minute == true)
{
\$this->minutes = floor(\$this->rest / SECONDS_PER_MINUTE);
\$this->rest = \$this->rest - (\$this->minutes * SECONDS_PER_MINUTE);
}

if(\$second == true)
{
\$this->seconds = \$this->rest;
}

if(\$array != true)
{          //when it's not 0   OR  when you want to have it even when it's 0
return ((\$this->years   != 0 || \$year) ? \$this->years." Years, " : "").
((\$this->months  != 0 || \$month) ? \$this->months." Months " : "").
((\$this->weeks   != 0 || \$week) ? \$this->weeks." Weeks " : "").
((\$this->days    != 0 || \$day) ? \$this->days." Days " : "").
((\$this->hours   != 0 || \$hour) ? \$this->hours." Hours " : "").
((\$this->minutes != 0 || \$minute) ? \$this->minutes." Minutes " : "").
((\$this->seconds != 0 || \$second) ? \$this->seconds." Seconds " : "0 Seconds");    //falls Unterschied 0 ist, soll kein leerer string returned werden
}
else
{
return array("years"   => \$this->years,
"months"  => \$this->months,
"weeks"   => \$this->weeks,
"days"    => \$this->days,
"hours"   => \$this->hours,
"minutes" => \$this->minutes,
"seconds" => \$this->seconds);
}
}
}```

Und hier ein Beispiel zur Verwendung der Klasse:
index.php

```error_reporting(E_ALL | E_STRICT);
error_reporting(E_ALL | E_STRICT);
require_once("resttime.class.php");

for(\$i = 0; \$i < 30; \$i++)
{
\$test[\$i] = new Resttime;
}

for(\$i = 0; \$i < 30; \$i++)
{
\$test[\$i]->set_start(date("d.m.Y H:i:s", time()-mt_rand(1, 9999999)*20));
\$test[\$i]->set_end("04.02.2009 23:00:00");
echo "
".\$test[\$i]->get_difference_formated(false, array(true, true),
array(true, true),
array(true, true),
array(true, true),
array(true, true),
array(true, true),
array(true, true));

}```     (Wurde noch nicht bewertet) Loading...

## 2 Kommentare zu “Restzeiten mit PHP berechnen (OOP)”

1. […] Restzeiten mit PHP berechnen (OOP) (34) […]

2. […] Restzeiten mit PHP berechnen (OOP) (73) […]

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

### »Informationen zum Artikel

Autor: Simon
Datum: 21.07.2008
Zeit: 19:06 Uhr
Kategorien: Codeschnipsel
Gelesen: 5270x heute: 2x