【问题标题】:CakePHP: JQuery Datepicker doesnt show DB valueCakePHP:JQuery Datepicker 不显示 DB 值
【发布时间】:2019-06-10 10:09:58
【问题描述】:

我尝试在我的 CakePHP 3.6.14 应用程序中实现 this example

(function( $ ) {
    $.widget( "ui.dp", {
            _create: function() {
                var el = this.element.hide();
                this.options.altField = el;
                var input = this.input = $('<input>').insertBefore( el )
                input.focusout(function(){
                        if(input.val() == ''){
                            el.val('');
                        }
                    });
                input.datepicker(this.options)
                if(convertDate(el.val()) != null){
                    this.input.datepicker('setDate', convertDate(el.val()));
                }
            },
            destroy: function() {
                this.input.remove();
                this.element.show();
                $.Widget.prototype.destroy.call( this );
            }
    });

    var convertDate = function(date){
      if(typeof(date) != 'undefined' && date != null && date != ''){
        return new Date(date);
      } else {
        return null;
      }
    } })( jQuery );

所以在default.ctp我有这个代码:

$(document).ready(function() {
           $( "input.datepicker" ).dp({
              dateFormat: 'dd/mm/yy',
              altFormat: 'yy-mm-dd'
           }); 

        });

edit.ctp我有这个控制:

echo $this->Form->control('created_date', ['class' => 'datepicker', 'type' => 'text', 'empty' => true]);

虽然它在数据库中正确提交并存储了日期,但当我再次打开编辑页面时,我看到的是今天的日期,而不是数据库中的日期。数据库值为:2019-06-27,如果我将dateFormat 选项更改为yy-mm-dd,我仍然会得到今天的日期,而不是保存在数据库中的日期。

但是在生成的html代码中我可以看到值是正确的:

【问题讨论】:

  • 如果不使用日期选择器,并且不覆盖表单控件中的默认日期格式,保存的日期是否正确显示?

标签: jquery cakephp datepicker jquery-ui-datepicker


【解决方案1】:

使用该脚本,您应该在表单控件中使用altFormat,即dateFormat显示 格式,altFormat格式,并且该格式应该是标准 ISO 格式,因为脚本会尝试将值转换为 Date 对象,因此非 ISO 模式可能会导致错误解析日期,或者根本无法解析它们,这就是正在发生的事情使用您的值,因为JavaScript Date parser 将第一个数字视为月份,而不是日期。

如果您的应用的默认日期字符串转换格式与altFormat 不匹配,那么您必须手动处理,例如对于单个字段如下所示:

$value = $this->Form->getSourceValue('created_date');
if ($value instanceof \DateTimeInterface) {
    $value = $value->format('Y-m-d');
}

echo $this->Form->control('created_date', [
    'class' => 'datepicker',
    'type' => 'text',
    'val' => $value
]);

还请注意,yy 在 jQuery UI 日期选择器中表示全年,即2019,而不是19,这似乎是您应用程序的默认设置。如果要使用后者,则需要在dateFormat 模式中使用单个y

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2011-02-10
    • 2013-05-19
    相关资源
    最近更新 更多