Test timezone manipulation.
function testTimezoneConversion() {
// Create date object from datetime string in UTC, and convert
// it to a local date.
$input = '1970-01-01 00:00:00';
$timezone = 'UTC';
$date = new DateTimePlus($input, $timezone);
$value = $date
->format('c');
$expected = '1970-01-01T00:00:00+00:00';
$this
->assertEqual($expected, $value, "Test new DateTimePlus('{$input}', '{$timezone}'): should be {$expected}, found {$value}.");
$expected = 'UTC';
$value = $date
->getTimeZone()
->getName();
$this
->assertEqual($expected, $value, "The current timezone is {$value}: should be {$expected}.");
$expected = 0;
$value = $date
->getOffset();
$this
->assertEqual($expected, $value, "The current offset is {$value}: should be {$expected}.");
$timezone = 'America/Los_Angeles';
$date
->setTimezone(new DateTimeZone($timezone));
$value = $date
->format('c');
$expected = '1969-12-31T16:00:00-08:00';
$this
->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone({$timezone})): should be {$expected}, found {$value}.");
$expected = 'America/Los_Angeles';
$value = $date
->getTimeZone()
->getName();
$this
->assertEqual($expected, $value, "The current timezone should be {$expected}, found {$value}.");
$expected = '-28800';
$value = $date
->getOffset();
$this
->assertEqual($expected, $value, "The current offset should be {$expected}, found {$value}.");
// Convert the local time to UTC using string input.
$input = '1969-12-31 16:00:00';
$timezone = 'America/Los_Angeles';
$date = new DateTimePlus($input, $timezone);
$offset = $date
->getOffset();
$value = $date
->format('c');
$expected = '1969-12-31T16:00:00-08:00';
$this
->assertEqual($expected, $value, "Test new DateTimePlus('{$input}', '{$timezone}'): should be {$expected}, found {$value}.");
$expected = 'America/Los_Angeles';
$value = $date
->getTimeZone()
->getName();
$this
->assertEqual($expected, $value, "The current timezone should be {$expected}, found {$value}.");
$expected = '-28800';
$value = $date
->getOffset();
$this
->assertEqual($expected, $value, "The current offset should be {$expected}, found {$value}.");
$timezone = 'UTC';
$date
->setTimezone(new DateTimeZone($timezone));
$value = $date
->format('c');
$expected = '1970-01-01T00:00:00+00:00';
$this
->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone({$timezone})): should be {$expected}, found {$value}.");
$expected = 'UTC';
$value = $date
->getTimeZone()
->getName();
$this
->assertEqual($expected, $value, "The current timezone should be {$expected}, found {$value}.");
$expected = '0';
$value = $date
->getOffset();
$this
->assertEqual($expected, $value, "The current offset should be {$expected}, found {$value}.");
// Convert the local time to UTC using string input.
$input = '1969-12-31 16:00:00';
$timezone = 'Europe/Warsaw';
$date = new DateTimePlus($input, $timezone);
$offset = $date
->getOffset();
$value = $date
->format('c');
$expected = '1969-12-31T16:00:00+01:00';
$this
->assertEqual($expected, $value, "Test new DateTimePlus('{$input}', '{$timezone}'): should be {$expected}, found {$value}.");
$expected = 'Europe/Warsaw';
$value = $date
->getTimeZone()
->getName();
$this
->assertEqual($expected, $value, "The current timezone should be {$expected}, found {$value}.");
$expected = '+3600';
$value = $date
->getOffset();
$this
->assertEqual($expected, $value, "The current offset should be {$expected}, found {$value}.");
}