function FieldDateTest::testFieldDate

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()
  2. 8.9.x core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()
  3. 11.x core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()

Sets up functional test of the views date field.

File

core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php, line 72

Class

FieldDateTest
Tests the core Drupal\views\Plugin\views\field\Date handler.

Namespace

Drupal\Tests\views\Kernel\Handler

Code

public function testFieldDate() : void {
  $view = Views::getView('test_view');
  $view->setDisplay();
  $view->displayHandlers
    ->get('default')
    ->overrideOption('fields', [
    'created' => [
      'id' => 'created',
      'table' => 'views_test_data',
      'field' => 'created',
      'relationship' => 'none',
      // ISO 8601 format, see https://www.php.net/manual/datetime.format.php
'custom_date_format' => 'c',
    ],
    'destroyed' => [
      'id' => 'destroyed',
      'table' => 'views_test_data',
      'field' => 'destroyed',
      'relationship' => 'none',
      'custom_date_format' => 'c',
    ],
  ]);
  $time = gmmktime(0, 0, 0, 1, 1, 2000);
  $this->executeView($view);
  $timezones = [
    NULL,
    'UTC',
    'America/New_York',
  ];
  /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
  $date_formatter = $this->container
    ->get('date.formatter');
  // Check each date/time in various timezones.
  foreach ($timezones as $timezone) {
    $dates = [
      'short' => $date_formatter->format($time, 'short', '', $timezone),
      'medium' => $date_formatter->format($time, 'medium', '', $timezone),
      'long' => $date_formatter->format($time, 'long', '', $timezone),
      'custom' => $date_formatter->format($time, 'custom', 'c', $timezone),
      'fallback' => $date_formatter->format($time, 'fallback', '', $timezone),
      'html_date' => $date_formatter->format($time, 'html_date', '', $timezone),
      'html_datetime' => $date_formatter->format($time, 'html_datetime', '', $timezone),
      'html_month' => $date_formatter->format($time, 'html_month', '', $timezone),
      'html_time' => $date_formatter->format($time, 'html_time', '', $timezone),
      'html_week' => $date_formatter->format($time, 'html_week', '', $timezone),
      'html_year' => $date_formatter->format($time, 'html_year', '', $timezone),
      'html_yearless_date' => $date_formatter->format($time, 'html_yearless_date', '', $timezone),
    ];
    $this->assertRenderedDatesEqual($view, $dates, $timezone);
  }
  // Check times in the past.
  $time_since = $date_formatter->formatTimeDiffSince($time);
  $intervals = [
    'raw time ago' => $time_since,
    'time ago' => "{$time_since} ago",
    'raw time span' => $time_since,
    'inverse time span' => "-{$time_since}",
    'time span' => "{$time_since} ago",
  ];
  $this->assertRenderedDatesEqual($view, $intervals);
  // Check times in the future.
  $time = gmmktime(0, 0, 0, 1, 1, 2050);
  $formatted = $date_formatter->formatTimeDiffUntil($time);
  $intervals = [
    'raw time span' => "-{$formatted}",
    'time span' => "{$formatted} hence",
  ];
  $this->assertRenderedFutureDatesEqual($view, $intervals);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.