Timestamp helper
You can view the source on GitHub.
Basic usage
The timestamp helper is just an extended version of the base PHP DateTime object:
$timestamp = new timestamp('2014W04-2');
$timestamp = new timestamp('2014-09-22 17:43:21', 'db');
$timestamp = new timestamp('2014-09-22 17:43:21', 'Europe/London');
$now = new timestamp();
debug($timestamp->format('l jS F Y, g:i:sa'));
Monday 22nd September 2014, 5:43:21pm
debug($now);
2014-09-22 17:43:21 (Europe/London)
echo $now; // In UTC, typically for the datababse (see below)
2014-09-22 16:43:21
You can clone (and modify) its value:
$timestamp = $now->clone();
$timestamp = $now->clone('+3 days');
And you can return a HTML version, with the HTML5 <time> tag:
debug($timestamp->html('l jS F Y, g:ia'));
<time datetime="2014-09-25T17:43:21+01:00">Thursday 25th September 2014, 5:43pm</time>
Create from format
Like the PHP object, you can also do:
$timestamp = timestamp::createFromFormat('d/m/y H:i:s', '23/06/08 09:47:47');
Database usage
When using a value from the database:
$timestamp = new timestamp($row['field'], 'db');
echo $timestamp->format('l jS F Y, g:i:sa');
The timestamp helper will parse the UTC value (note the 'db' timezone), and the formatted output will then use "output.timezone".
Database storage
When storing a 'datetime' value in the database, you can simply use the variable:
$now = new timestamp();
$db->insert(DB_PREFIX . 'table', array(
'name' => $name,
'created' => $now,
));
Or you can use the 'db' format:
$timestamp->format('db');
Both of these methods use the ISO format "YYYY-MM-DD HH:MM:SS" in UTC.
But if you want to actually store NULL in the database (not "0000-00-00"), then you will need to use the format('db') method.
NULL values
If the timestamp helper is initialised with the values:
NULL '0000-00-00' '0000-00-00 00:00:00'
Then it will typically return NULL when you call the format() or html() functions, unless you provide a value to use instead:
$timestamp = new timestamp('0000-00-00 00:00:00', 'db');
echo $timestamp->format('jS F Y', 'N/A');
echo $timestamp->html('jS F Y', 'N/A');
If you just want to test if the value is NULL:
debug($timestamp->null());
This returns false if not NULL, or a truthy value if NULL (e.g. '0000-00-00').
Site config
output.timezone
The timezone to format the dates (e.g. "Europe/London"),
Defaults to the PHP date_default_timezone_get() function.
Holiday support
You can store a list of holidays in a "system_holiday" table, returning them with:
timestamp::holidays_get();
These dates are then used when calling:
$timestamp->business_days_add(5);
Return a new timestamp, 5 business days later.
$timestamp->business_day_next();
Return the next business day (rarely used).
$timestamp->business_days_diff($end);
The number of business days between two timestamps.
For example:
$start = new timestamp('2014-09-20');
Saturday 20th September 2014
$day_1 = $start->business_day_next();
Monday 22nd September 2014
$day_2 = $day_1->business_days_add(5);
Monday 29th September 2014
debug($day_2->business_days_diff('2014-10-07'));
6 days