jquery - CakePHP:JQuery Datepicker 不显示 DB 值
问题描述
我尝试在我的 CakePHP 3.6.14 应用程序中实现这个示例。
(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 代码中,我可以看到该值是正确的:
解决方案
使用该脚本,您应该altFormat
在表单控件中使用,即dateFormat
显示格式,并且altFormat
是值格式,并且该格式应该是标准的 ISO 格式,因为脚本试图将值转换为Date
对象,所以非ISO 模式可能会导致错误地解析日期,或者根本无法解析它们,这就是您的值所发生的情况,因为JavaScriptDate
解析器将第一个数字视为月份,而不是日期。
如果您的应用程序的默认日期字符串转换格式与 不匹配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
not 19
,这似乎是您的应用程序的默认设置。如果你想使用后者,那么你需要y
在dateFormat
模式中使用一个单一的。
推荐阅读
- java - 使用 Redis 在 Spring Boot 应用程序和 PHP 之间共享会话
- wpf - 仅针对某些部分更改 WPF 标签中的字体粗细
- javascript - 清除搜索输入后将响应重置为 null Vue.js
- java - 什么是在这里抛出 IOException?
- reactjs - gatsbyjs,reactjs - 为什么组件渲染两次而图像没有出现?
- ios - 快速重新加载单元格后如何在单元格中保持滚动视图内容偏移
- html - 在接触和不接触垫子输入后单元测试垫子错误的存在
- node.js - 节点 gyp 不工作(WindowsError:[错误 183] ═хтючьюцэю ёючфрЄ№Їрщы,)
- c++ - 将二进制文件添加到其他人的柯南食谱中
- jquery - 当通过 AJAX 重定向收到 401 时,有没有办法在 Chrome 中删除 WWW-Authenticate?