function DateTimePlusTest::testTimezoneConversion

Test timezone manipulation.

File

drupal/core/modules/system/lib/Drupal/system/Tests/Datetime/DateTimePlusTest.php, line 194
Definition of Drupal\system\Tests\Datetime\DateTimePlusTest.

Class

DateTimePlusTest

Namespace

Drupal\system\Tests\Datetime

Code

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}.");
}