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
值的新渲染类型。
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
值的新渲染类型。