You are here

class DrupalDateTime in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Datetime/DrupalDateTime.php \Drupal\Core\Datetime\DrupalDateTime

Extends DateTimePlus().

This class extends the basic component and adds in Drupal-specific handling, like translation of the format() method.

Static methods in base class can also be used to create DrupalDateTime objects. For example:

DrupalDateTime::createFromArray( array('year' => 2010, 'month' => 9, 'day' => 28) )

Hierarchy

Expanded class hierarchy of DrupalDateTime

See also

\Drupal/Component/Datetime/DateTimePlus.php

23 files declare their use of DrupalDateTime
CommentForm.php in core/modules/comment/src/CommentForm.php
Contains \Drupal\comment\CommentForm.
CommentPreviewTest.php in core/modules/comment/src/Tests/CommentPreviewTest.php
Contains \Drupal\comment\Tests\CommentPreviewTest.
DateElementBase.php in core/lib/Drupal/Core/Datetime/Element/DateElementBase.php
Contains \Drupal\Core\Datetime\Element\DateElementBase.
DateFormatFormBase.php in core/modules/system/src/Form/DateFormatFormBase.php
Contains \Drupal\system\Form\DateFormatFormBase.
Datelist.php in core/lib/Drupal/Core/Datetime/Element/Datelist.php
Contains \Drupal\Core\Datetime\Element\Datelist.

... See full list

File

core/lib/Drupal/Core/Datetime/DrupalDateTime.php, line 25
Contains \Drupal\Core\Datetime\DrupalDateTime.

Namespace

Drupal\Core\Datetime
View source
class DrupalDateTime extends DateTimePlus {
  use StringTranslationTrait;

  /**
   * Format string translation cache.
   *
   */
  protected $formatTranslationCache;

  /**
   * Constructs a date object.
   *
   * @param string $time
   *   A date/input_time_adjusted string. Defaults to 'now'.
   * @param mixed $timezone
   *   PHP DateTimeZone object, string or NULL allowed.
   *   Defaults to NULL.
   * @param array $settings
   *   - validate_format: (optional) Boolean choice to validate the
   *     created date using the input format. The format used in
   *     createFromFormat() allows slightly different values than format().
   *     Using an input format that works in both functions makes it
   *     possible to a validation step to confirm that the date created
   *     from a format string exactly matches the input. This option
   *     indicates the format can be used for validation. Defaults to TRUE.
   *   - langcode: (optional) Used to control the result of the format() method.
   *     Defaults to NULL.
   *   - debug: (optional) Boolean choice to leave debug values in the
   *     date object for debugging purposes. Defaults to FALSE.
   */
  public function __construct($time = 'now', $timezone = NULL, $settings = array()) {
    if (!isset($settings['langcode'])) {
      $settings['langcode'] = \Drupal::languageManager()
        ->getCurrentLanguage()
        ->getId();
    }

    // Instantiate the parent class.
    parent::__construct($time, $timezone, $settings);
  }

  /**
   * Overrides prepareTimezone().
   *
   * Override basic component timezone handling to use Drupal's
   * knowledge of the preferred user timezone.
   */
  protected function prepareTimezone($timezone) {
    if (empty($timezone)) {

      // Fallback to user or system default timezone.
      $timezone = drupal_get_user_timezone();
    }
    return parent::prepareTimezone($timezone);
  }

  /**
   * Overrides format().
   *
   * @param string $format
   *   A format string using either PHP's date().
   * @param array $settings
   *   - timezone: (optional) String timezone name. Defaults to the timezone
   *     of the date object.
   *   - langcode: (optional) String two letter language code used to control
   *     the result of the format() method. Defaults to NULL.
   *
   * @return string
   *   The formatted value of the date. Since the format may contain user input,
   *   this value should be escaped when output.
   */
  public function format($format, $settings = array()) {
    $langcode = !empty($settings['langcode']) ? $settings['langcode'] : $this->langcode;
    $value = '';

    // Format the date and catch errors.
    try {

      // Encode markers that should be translated. 'A' becomes
      // '\xEF\AA\xFF'. xEF and xFF are invalid UTF-8 sequences,
      // and we assume they are not in the input string.
      // Paired backslashes are isolated to prevent errors in
      // read-ahead evaluation. The read-ahead expression ensures that
      // A matches, but not \A.
      $format = preg_replace(array(
        '/\\\\\\\\/',
        '/(?<!\\\\)([AaeDlMTF])/',
      ), array(
        "",
        "",
      ), $format);

      // Call date_format().
      $format = parent::format($format, $settings);

      // Translates a formatted date string.
      $translation_callback = function ($matches) use ($langcode) {
        $code = $matches[1];
        $string = $matches[2];
        if (!isset($this->formatTranslationCache[$langcode][$code][$string])) {
          $options = array(
            'langcode' => $langcode,
          );
          if ($code == 'F') {
            $options['context'] = 'Long month name';
          }
          if ($code == '') {
            $this->formatTranslationCache[$langcode][$code][$string] = $string;
          }
          else {
            $this->formatTranslationCache[$langcode][$code][$string] = $this
              ->t($string, array(), $options);
          }
        }
        return $this->formatTranslationCache[$langcode][$code][$string];
      };

      // Translate the marked sequences.
      $value = preg_replace_callback('/\\xEF([AaeDlMTF]?)(.*?)\\xFF/', $translation_callback, $format);
    } catch (\Exception $e) {
      $this->errors[] = $e
        ->getMessage();
    }
    return $value;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DateTimePlus::$dateParts protected static property An array of possible date parts.
DateTimePlus::$dateTimeObject protected property The DateTime object.
DateTimePlus::$errors protected property An array of errors encountered when creating this date.
DateTimePlus::$inputFormatAdjusted protected property The prepared format, if provided.
DateTimePlus::$inputFormatRaw protected property The value of the format passed to the constructor.
DateTimePlus::$inputTimeAdjusted protected property The prepared time, without timezone, for this date.
DateTimePlus::$inputTimeRaw protected property The value of the time value passed to the constructor.
DateTimePlus::$inputTimeZoneAdjusted protected property The prepared timezone object used to construct this date.
DateTimePlus::$inputTimeZoneRaw protected property The value of the timezone passed to the constructor.
DateTimePlus::$langcode protected property The value of the language code passed to the constructor.
DateTimePlus::arrayToISO public static function Creates an ISO date from an array of values.
DateTimePlus::checkArray public static function Checks that arrays of date parts will create a valid date.
DateTimePlus::checkErrors public function Examines getLastErrors() to see what errors to report.
DateTimePlus::createFromArray public static function Creates a date object from an array of date parts.
DateTimePlus::createFromDateTime public static function Creates a date object from an input date object.
DateTimePlus::createFromFormat public static function Creates a date object from an input format.
DateTimePlus::createFromTimestamp public static function Creates a date object from timestamp input.
DateTimePlus::datePad public static function Pads date parts with zeros.
DateTimePlus::FORMAT constant
DateTimePlus::getErrors public function Gets error messages.
DateTimePlus::hasErrors public function Detects if there were errors in the processing of this date.
DateTimePlus::prepareArray public static function Creates a complete array from a possibly incomplete array of date parts.
DateTimePlus::prepareFormat protected function Prepares the input format value.
DateTimePlus::prepareTime protected function Prepares the input time value.
DateTimePlus::render public function Renders the timezone name. Overrides ToStringTrait::render
DateTimePlus::RFC7231 constant A RFC7231 Compliant date.
DateTimePlus::__call public function Implements the magic __call method.
DateTimePlus::__callStatic public static function Implements the magic __callStatic method.
DateTimePlus::__clone public function Implements the magic __clone method.
DrupalDateTime::$formatTranslationCache protected property Format string translation cache.
DrupalDateTime::format public function Overrides format(). Overrides DateTimePlus::format
DrupalDateTime::prepareTimezone protected function Overrides prepareTimezone(). Overrides DateTimePlus::prepareTimezone
DrupalDateTime::__construct public function Constructs a date object. Overrides DateTimePlus::__construct
StringTranslationTrait::$stringTranslation protected property The string translation service.
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
ToStringTrait::_die protected function For test purposes, wrap die() in an overridable method.
ToStringTrait::__toString public function Implements the magic __toString() method.