class Date in Drupal 10
Same name in this branch
- 10 core/lib/Drupal/Core/Render/Element/Date.php \Drupal\Core\Render\Element\Date
- 10 core/modules/views/src/Plugin/views/filter/Date.php \Drupal\views\Plugin\views\filter\Date
- 10 core/modules/views/src/Plugin/views/sort/Date.php \Drupal\views\Plugin\views\sort\Date
- 10 core/modules/views/src/Plugin/views/argument/Date.php \Drupal\views\Plugin\views\argument\Date
- 10 core/modules/views/src/Plugin/views/field/Date.php \Drupal\views\Plugin\views\field\Date
- 10 core/modules/datetime/src/Plugin/views/filter/Date.php \Drupal\datetime\Plugin\views\filter\Date
- 10 core/modules/datetime/src/Plugin/views/sort/Date.php \Drupal\datetime\Plugin\views\sort\Date
- 10 core/modules/datetime/src/Plugin/views/argument/Date.php \Drupal\datetime\Plugin\views\argument\Date
Same name and namespace in other branches
- 8 core/modules/datetime/src/Plugin/views/filter/Date.php \Drupal\datetime\Plugin\views\filter\Date
- 9 core/modules/datetime/src/Plugin/views/filter/Date.php \Drupal\datetime\Plugin\views\filter\Date
Date/time views filter.
Even thought dates are stored as strings, the numeric filter is extended because it provides more sensible operators.
Plugin annotation
@ViewsFilter("datetime");
Hierarchy
- class \Drupal\views\Plugin\views\filter\FilterPluginBase extends \Drupal\views\Plugin\views\HandlerBase implements CacheableDependencyInterface
- class \Drupal\views\Plugin\views\filter\NumericFilter
- class \Drupal\views\Plugin\views\filter\Date
- class \Drupal\datetime\Plugin\views\filter\Date implements ContainerFactoryPluginInterface uses FieldAPIHandlerTrait
- class \Drupal\views\Plugin\views\filter\Date
- class \Drupal\views\Plugin\views\filter\NumericFilter
Expanded class hierarchy of Date
Related topics
23 string references to 'Date'
- Date::getSortName in core/
modules/ views/ src/ Plugin/ views/ argument/ Date.php - Datetime::processDatetime in core/
lib/ Drupal/ Core/ Datetime/ Element/ Datetime.php - Expands a datetime element type into date and/or time elements.
- DateTimeSchemaTest::testDateTimeSchema in core/
modules/ datetime/ tests/ src/ Kernel/ Views/ DateTimeSchemaTest.php - Tests argument plugin schema.
- DbLogController::eventDetails in core/
modules/ dblog/ src/ Controller/ DbLogController.php - Displays details about a specific database log message.
- DbLogController::overview in core/
modules/ dblog/ src/ Controller/ DbLogController.php - Displays a listing of database log messages.
File
- core/
modules/ datetime/ src/ Plugin/ views/ filter/ Date.php, line 25
Namespace
Drupal\datetime\Plugin\views\filterView source
class Date extends NumericDate implements ContainerFactoryPluginInterface {
use FieldAPIHandlerTrait;
/**
* The date formatter service.
*
* @var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter;
/**
* Date format for SQL conversion.
*
* @var string
*
* @see \Drupal\views\Plugin\views\query\Sql::getDateFormat()
*/
protected $dateFormat = DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
/**
* Determines if the timezone offset is calculated.
*
* @var bool
*/
protected $calculateOffset = TRUE;
/**
* The request stack used to determine current time.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* Constructs a new Date handler.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The date formatter service.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack used to determine the current time.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, DateFormatterInterface $date_formatter, RequestStack $request_stack) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->dateFormatter = $date_formatter;
$this->requestStack = $request_stack;
$definition = $this
->getFieldStorageDefinition();
if ($definition
->getSetting('datetime_type') === DateTimeItem::DATETIME_TYPE_DATE) {
// Date format depends on field storage format.
$this->dateFormat = DateTimeItemInterface::DATE_STORAGE_FORMAT;
// Timezone offset calculation is not applicable to dates that are stored
// as date-only.
$this->calculateOffset = FALSE;
}
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('date.formatter'), $container
->get('request_stack'));
}
/**
* Override parent method, which deals with dates as integers.
*/
protected function opBetween($field) {
$timezone = $this
->getTimezone();
$origin_offset = $this
->getOffset($this->value['min'], $timezone);
// Although both 'min' and 'max' values are required, default empty 'min'
// value as UNIX timestamp 0.
$min = !empty($this->value['min']) ? $this->value['min'] : '@0';
// Convert to ISO format and format for query. UTC timezone is used since
// dates are stored in UTC.
$a = new DateTimePlus($min, new \DateTimeZone($timezone));
$a = $this->query
->getDateFormat($this->query
->getDateField("'" . $this->dateFormatter
->format($a
->getTimestamp() + $origin_offset, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT, DateTimeItemInterface::STORAGE_TIMEZONE) . "'", TRUE, $this->calculateOffset), $this->dateFormat, TRUE);
$b = new DateTimePlus($this->value['max'], new \DateTimeZone($timezone));
$b = $this->query
->getDateFormat($this->query
->getDateField("'" . $this->dateFormatter
->format($b
->getTimestamp() + $origin_offset, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT, DateTimeItemInterface::STORAGE_TIMEZONE) . "'", TRUE, $this->calculateOffset), $this->dateFormat, TRUE);
// This is safe because we are manually scrubbing the values.
$operator = strtoupper($this->operator);
$field = $this->query
->getDateFormat($this->query
->getDateField($field, TRUE, $this->calculateOffset), $this->dateFormat, TRUE);
$this->query
->addWhereExpression($this->options['group'], "{$field} {$operator} {$a} AND {$b}");
}
/**
* Override parent method, which deals with dates as integers.
*/
protected function opSimple($field) {
$timezone = $this
->getTimezone();
$origin_offset = $this
->getOffset($this->value['value'], $timezone);
// Convert to ISO. UTC timezone is used since dates are stored in UTC.
$value = new DateTimePlus($this->value['value'], new \DateTimeZone($timezone));
$value = $this->query
->getDateFormat($this->query
->getDateField("'" . $this->dateFormatter
->format($value
->getTimestamp() + $origin_offset, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT, DateTimeItemInterface::STORAGE_TIMEZONE) . "'", TRUE, $this->calculateOffset), $this->dateFormat, TRUE);
// This is safe because we are manually scrubbing the value.
$field = $this->query
->getDateFormat($this->query
->getDateField($field, TRUE, $this->calculateOffset), $this->dateFormat, TRUE);
$this->query
->addWhereExpression($this->options['group'], "{$field} {$this->operator} {$value}");
}
/**
* Get the proper time zone to use in computations.
*
* Date-only fields do not have a time zone associated with them, so the
* filter input needs to use UTC for reference. Otherwise, use the time zone
* for the current user.
*
* @return string
* The time zone name.
*/
protected function getTimezone() {
return $this->dateFormat === DateTimeItemInterface::DATE_STORAGE_FORMAT ? DateTimeItemInterface::STORAGE_TIMEZONE : date_default_timezone_get();
}
/**
* Get the proper offset from UTC to use in computations.
*
* @param string $time
* A date/time string compatible with \DateTime. It is used as the
* reference for computing the offset, which can vary based on the time
* zone rules.
* @param string $timezone
* The time zone that $time is in.
*
* @return int
* The computed offset in seconds.
*/
protected function getOffset($time, $timezone) {
// Date-only fields do not have a time zone or offset from UTC associated
// with them. For relative (i.e. 'offset') comparisons, we need to compute
// the user's offset from UTC for use in the query.
$origin_offset = 0;
if ($this->dateFormat === DateTimeItemInterface::DATE_STORAGE_FORMAT && $this->value['type'] === 'offset') {
$origin_offset = $origin_offset + timezone_offset_get(new \DateTimeZone(date_default_timezone_get()), new \DateTime($time, new \DateTimeZone($timezone)));
}
return $origin_offset;
}
}
Members
Name![]() |
Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Date:: |
protected | property | Determines if the timezone offset is calculated. | |
Date:: |
protected | property | Date format for SQL conversion. | |
Date:: |
protected | property | The date formatter service. | |
Date:: |
protected | property | The request stack used to determine current time. | |
Date:: |
public | function |
Do some minor translation of the exposed input. Overrides NumericFilter:: |
|
Date:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
Date:: |
protected | function |
Overrides NumericFilter:: |
|
Date:: |
protected | function | Get the proper offset from UTC to use in computations. | |
Date:: |
protected | function | Get the proper time zone to use in computations. | |
Date:: |
protected | function |
Determines if the given grouped filter entry has a valid value. Overrides FilterPluginBase:: |
|
Date:: |
protected | function |
Override parent method, which deals with dates as integers. Overrides Date:: |
|
Date:: |
protected | function |
Override parent method, which deals with dates as integers. Overrides Date:: |
|
Date:: |
public | function | ||
Date:: |
public | function |
Simple validate handler. Overrides FilterPluginBase:: |
|
Date:: |
public | function | Validate that the time values convert to something usable. | |
Date:: |
protected | function |
Add a type selector to the value form. Overrides NumericFilter:: |
|
Date:: |
public | function | Constructs a new Date handler. | |
FieldAPIHandlerTrait:: |
protected | property | The entity field manager. | |
FieldAPIHandlerTrait:: |
protected | property | The field definition. | |
FieldAPIHandlerTrait:: |
protected | property | The field storage definition. | |
FieldAPIHandlerTrait:: |
protected | function | Returns the entity field manager. | |
FieldAPIHandlerTrait:: |
protected | function | Gets the field definition. | |
FieldAPIHandlerTrait:: |
protected | function | Gets the field storage configuration. | |
FilterPluginBase:: |
public | property | Disable the possibility to allow an exposed input to be optional. | |
FilterPluginBase:: |
public | property | Contains the information of the selected item in a grouped filter. | |
FilterPluginBase:: |
public | property | Disable the possibility to use operators. | 1 |
FilterPluginBase:: |
public | property | Contains the operator which is used on the query. | |
FilterPluginBase:: |
public | property | Contains the actual value of the field,either configured in the views ui or entered in the exposed filters. | |
FilterPluginBase:: |
public | function | Add a new group to the exposed filter groups. | |
FilterPluginBase:: |
protected static | function | Filter by no empty values, though allow the use of (string) "0". | |
FilterPluginBase:: |
protected | function | Build the form to let users create the group of exposed filters. | |
FilterPluginBase:: |
public | function | Render our chunk of the exposed filter form when selecting. | |
FilterPluginBase:: |
public | function | Displays the Build Group form. | |
FilterPluginBase:: |
protected | function | Provide default options for exposed filters. | |
FilterPluginBase:: |
protected | function | Save new group items, re-enumerates and remove groups marked to delete. | |
FilterPluginBase:: |
protected | function | Validate the build group options form. | |
FilterPluginBase:: |
public | function | Provide the basic form which calls through to subforms. | 1 |
FilterPluginBase:: |
protected | function | Builds wrapper for value and operator forms. | |
FilterPluginBase:: |
protected | function | Determine if a filter can be converted into a group. | |
FilterPluginBase:: |
public | function | Determine if a filter can be exposed. | 5 |
FilterPluginBase:: |
public | function | Can this filter be used in OR groups? | 1 |
FilterPluginBase:: |
public | function | Transform the input from a grouped filter into a standard filter. | |
FilterPluginBase:: |
public | function | Tell the renderer about our exposed form. This only needs to be overridden for particularly complex forms. And maybe not even then. | |
FilterPluginBase:: |
protected | function | Make some translations to a form item to make it more suitable to exposing. | |
FilterPluginBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
5 |
FilterPluginBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
|
FilterPluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
1 |
FilterPluginBase:: |
public | function | Build a form containing a group of operator | values to apply as a single filter. | |
FilterPluginBase:: |
public | function | Returns the options available for a grouped filter that users checkboxes as widget, and therefore has to be applied several times, one per item selected. | |
FilterPluginBase:: |
public | function | Overrides \Drupal\views\Plugin\views\HandlerBase::init(). | 2 |
FilterPluginBase:: |
public | function | Returns TRUE if the exposed filter works like a grouped filter. | |
FilterPluginBase:: |
public | function | Returns TRUE if users can select multiple groups items of a grouped exposed filter. | |
FilterPluginBase:: |
protected | function | Options form subform for setting the operator. | 5 |
FilterPluginBase:: |
public | function | Perform any necessary changes to the form values prior to storage. | |
FilterPluginBase:: |
protected | function | Validate the operator form. | |
FilterPluginBase:: |
protected | function | Sanitizes the HTML select element's options. | |
FilterPluginBase:: |
protected | function | Shortcut to display the build_group/hide button. | |
FilterPluginBase:: |
public | function | Shortcut to display the exposed options form. | |
FilterPluginBase:: |
public | function | Shortcut to display the expose/hide button. | |
FilterPluginBase:: |
public | function | Shortcut to display the operator form. | |
FilterPluginBase:: |
protected | function | Shortcut to display the value form. | |
FilterPluginBase:: |
public | function | ||
FilterPluginBase:: |
public | function | If set to remember exposed input in the session, store it there. | |
FilterPluginBase:: |
public | function | Simple submit handler. | |
FilterPluginBase:: |
public static | function | ||
FilterPluginBase:: |
public | function | 2 | |
FilterPluginBase:: |
public | function | Validate the options form. | |
FilterPluginBase:: |
protected | function | Validates a filter identifier. | |
FilterPluginBase:: |
protected | function | Perform any necessary changes to the form values prior to storage. | 1 |
FilterPluginBase:: |
protected | function | Validate the options form. | 2 |
NumericFilter:: |
protected | property |
Disable the possibility to force a single value. Overrides FilterPluginBase:: |
|
NumericFilter:: |
public | function |
Display the filter on the administrative summary. Overrides FilterPluginBase:: |
|
NumericFilter:: |
public | function |
Options form subform for exposed filter options. Overrides FilterPluginBase:: |
|
NumericFilter:: |
public | function |
Provide default options for exposed filters. Overrides FilterPluginBase:: |
|
NumericFilter:: |
protected | function | 1 | |
NumericFilter:: |
public | function |
Provide a list of all the numeric operators. Overrides FilterPluginBase:: |
|
NumericFilter:: |
public | function | ||
NumericFilter:: |
protected | function | ||
NumericFilter:: |
protected | function | Filters by a regular expression. | |
NumericFilter:: |
public | function |
Add this filter to the query. Overrides FilterPluginBase:: |
2 |