src/Elements/FormatAsDatetime.php
<?php
declare(strict_types=1);
namespace Faf\TemplateEngine\Elements;
use DateTimeZone;
use Faf\TemplateEngine\Helpers\ElementSetting;
use Faf\TemplateEngine\Helpers\ParserElement;
use Yiisoft\Validator\Rule\Required;
/**
* Class FormatAsDatetime
*
* @package Faf\TemplateEngine\Elements
* @property array{string: \DateTime|string, format: int|string} $data
*/
class FormatAsDatetime extends ParserElement
{
/**
* {@inheritdoc}
*/
public function name(): string
{
return 'format-as-datetime';
}
/**
* {@inheritdoc}
*/
public function aliases(): array
{
return ['datetime'];
}
/**
* {@inheritdoc}
*/
public function description(): string
{
return 'Formats the value as a date.';
}
/**
* {@inheritdoc}
*/
public function elementSettings(): array
{
return [
new ElementSetting([
'name' => 'string',
'aliases' => [
'date',
'time',
'datetime',
'value'
],
'label' => 'String',
'element' => FormatAsDatetimeString::class,
'content' => true,
'defaultValue' => 'NOW',
'rules' => [
new Required(),
]
]),
new ElementSetting([
'name' => 'format',
'label' => 'Format',
'element' => FormatAsDatetimeFormat::class
]),
new ElementSetting([
'name' => 'input-time-zone',
'label' => 'Input time zone',
'defaultValue' => $this->getParser()->getSetting('default-input-time-zone'),
//'element' => TODO
]),
new ElementSetting([
'name' => 'display-time-zone',
'label' => 'Display time zone',
'defaultValue' => $this->getParser()->getSetting('default-display-time-zone'),
//'element' => TODO
]),
];
}
/**
* {@inheritdoc}
* @return false|string
*/
public function run()
{
$inputTimeZone = null;
if (!empty($this->data['input-time-zone'])) {
$inputTimeZone = new DateTimeZone($this->data['input-time-zone']);
}
$displayTimeZone = null;
if (!empty($this->data['display-time-zone'])) {
$displayTimeZone = new DateTimeZone($this->data['display-time-zone']);
}
return $this->parser->formatDateTime(
$this->data['string'],
$this->data['format'],
$inputTimeZone,
$displayTimeZone
);
}
}