CakePHP 3.x 和日期时间选择器

CakePHP 3.x and datetimepicker

我在添加函数中使用 https://github.com/xdan/datetimepicker 到 select 日期。奇迹般有效。现在当我想编辑它时 - 它输入了一个奇怪的日期。

自定义更改: bootstrap.php

date_default_timezone_set('Europe/Berlin');

edit.ctp

echo $this->Form->input('datetime', ['label' => __('Datum'), 'type'=>'text','id' => 'datetimepicker','selected' => '0000-00-00 00:00:00']);

日期时间选择器

$('#datetimepicker').datetimepicker({
format:'Y-m-d H:i',
lang: 'de'
});

我认为的输出:

<input type="text" name="datetime" id="datetimepicker" value="16.10.19 15:00">

我的编辑视图的调试输出

'datetime' => object(Cake\I18n\FrozenTime) {

        'time' => '2019-10-16T15:00:00+02:00',
        'timezone' => 'Europe/Berlin',
        'fixedNowTime' => false

    }

将 date_default_timezone_set 更改为 UTC。但这没有帮助。我想知道我的应用程序从哪里得到将其放入我的输出中的想法。当我再次使用我的 dtp select 它并选择一个日期时,它也可以工作 - 但它需要一个随机日期,如 2019-10-10,你必须一路返回,这非常不方便:/

有什么想法吗?

编辑

我在修补实体之前在我的 edit() 函数中添加了它并且它起作用了。

$adress['datetime'] = $adress['datetime']->i18nFormat('yyyy-MM-dd HH:mm');

您刚刚使用date_default_timezone_set('Europe/Berlin');设置服务器时区但是JavaScript 不关心服务器时区,如果你没有设置。 JavaScript 始终尝试使用您的 PC 时间。 所以,你需要使用JavaScript设置datetimepicker时区,如果datetimepicker 有时区选项。

尝试更改您的 edit.ctp 代码如下 -

echo $this->Form->input(
 'datetime',
 [
  'label' => __('Datum'),
  'type'=>'text',
  'id' => 'datetimepicker',
  'default' => date('Y-m-d H:i') #Set time for today
 ]
);

我在修补实体之前将它添加到我的 edit() 函数中,现在它可以工作了。希望这会帮助其他人。如果有人知道更好的方法,请分享!我认为这只是一种解决方法。

$adress['datetime'] = $adress['datetime']->i18nFormat('yyyy-MM-dd HH:mm');