TYPO3 时不时重置一个Field中的所有DateTimes

TYPO3 resets all DateTimes in one Field from time to time

我几个月前写的 extbase 扩展有问题: 通常一切正常,但在某些时候,系统会在 table.

的每个条目中将某个字段的所有日期时间信息更新回 1.1.1970

课程有模型。这些包含三个 DateTime 字段。课程的日期、开始和结束。问题仅发生在日期字段中。在模型中,它是这样定义的:

/**
 * date
 *
 * @var \DateTime
 */
protected $date = NULL;


**
 * Returns the date
 *
 * @return \DateTime $date
 */
public function getDate() {
    return $this->date;
}

/**
 * Sets the date
 *
 * @param \DateTime $date
 * @return void
 */
public function setDate(\DateTime $date) {
    $this->date = $date;
}

在TCA中,定义是:

    'date' => array(
        'exclude' => 1,
        'label' => 'shortend for example',
        'config' => array(
            'type' => 'input',
            'size' => 7,
            'eval' => 'date',
            'checkbox' => 1,
            'default' => time()
        ),
    ),

在数据库(MySQL)中,字段设置为INT(11)。

我不知道为什么会发生这种情况,也不知道它是由什么触发的。自11月页面上线以来,已经发生了3次。

还有一件奇怪的事:Evendo 所有 'date' 值都已更新,现在显示 01.01.1970 的日期值,值不同(这些是整数)并显示 2 的幂(从 128 开始) ) 或它们的组合 (e.q. 1'792 (1024 + 512 + 256))

我唯一可以复制的东西: 当一个课程项目从一个系统文件夹移动到另一个系统文件夹时,这个项目的日期(但不是所有的,就像在另一个错误中一样)下降到 1.1.1970

如果有人能帮助我,即使有提示或怀疑,我会很高兴,可能是错的或为什么会发生。每次导入另一个备份后,都有一种定时炸弹滴答作响的感觉,一点也不闪亮;)

提前致谢 xan

我想将其添加为评论,但我不允许(因为我的声誉)。

我预计 php 中的 DateTime 对象及其在存储库中的存储方式存在问题。 mysql 字段是一个整数。来自 php 的 DateTime 不是整数,而是一个对象。也许您需要在将 DateTime 保存到数据库之前将其转换为时间戳(= 整数)。

我认为你最后的话指出了解决方案:

A furthermore strange thing: Evendo all 'date'-values are updated and show now a datevalue for the 01.01.1970, the values are different (those are integers) and display exponentiations of 2 (starting at 128) or combinations of those (e.q. 1'792 (1024 + 512 + 256))

我怀疑在 table 设置的 ctrl 部分中,您将 date 字段设置为 sorting 列。因此,当移动一条记录时,TYPO3 会更改相应的值以确保记录的正确排序,例如在后端列表中或为前端输出选择记录时。为了便于在某处插入记录(并且不必重新排序 所有内容 ),TYPO3 默认使用 2 的倍数。