TYPO3 - TCA - 日期时间格式

TYPO3 - TCA - Datetimeformat

Typo3 6.2,正在处理我的个人分机。 我在这个 TCA 中使用了 flexform :

'eventdate' => array(
    'exclude' => 1,
    'label' => 'Date of event :',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval'     => 'datetime',
        'checkbox' => '0',
        'default'  => time(),
    ),
),

... 我的 SQL 字段是 DATETIME,示例来自我的 ext_tables.sql :

CREATE TABLE xxxxxxx
(
    eventdate DATETIME NOT NULL,
);

问题:保存时,Typo3 生成的字段格式是 hh:mm:ss dd:mm:yyyy 但在我的 SQL table日期时间格式是yyyy-mm-dd hh:mm:ss,然后当用户尝试在后端保存时出错:

1: These fields are not properly updated in database: (eventdate) Probably value mismatch with fieldtype.

如何解决这个问题?

我认为 int DATA TYPE 是在数据库中以时间戳格式存储 DATE 的最佳方式。

您需要像下面这样定义事件日期数据类型

CREATE TABLE xxxxxxx
(
    eventdate int(11) unsigned DEFAULT '0' NOT NULL,
);

原问题的TCA配置遗漏了dbType 属性,它指示TYPO3在DataHandler中保存数据时使用不同的时间格式(默认格式是unix时间戳标准化为 UTC)。

有关详细信息,请参阅 https://docs.typo3.org/typo3cms/TCAReference/7.6/Reference/Columns/Input/#dbtype(该文档适用于 TYPO3 7.6,但也适用于 TYPO3 6.0)。

ext_tables.sql

CREATE TABLE tx_myextension_xxxxxxx (
   eventdate DATETIME default NULL
)

TCA 字段配置

'eventdate' => array(
    'exclude' => 1,
    'label' => 'Date of event:',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval'     => 'datetime',
        'dbType'   => 'datetime',
        'default'  => date('Y-m-d H:i:s'),
    ),
),
  • 删除了 checkbox,它对于类型 input
  • 是多余的
  • 将默认值调整为 date('Y-m-d H:i:s')
  • 已添加 dbType 属性

TYPO3 v8 的旁注

参见 https://docs.typo3.org/typo3cms/TCAReference/8.7/ColumnsConfig/Type/Input.html#rendertype-inputdatetime,其中显示了可在 TYPO3 v8 中使用的 datetime 值的新渲染类型。