我有一个返回日期/时间值的表单。这是相关位的代码(它是Knockout JS中的javascript代码,该网站使用以及使用Symfony进行验证的Propel,以及用于日期格式的MomentJS):
self.startDate = ko.computed(function() {
var startDate = moment(self.timesheetDate() + " " + self.startTime());
return startDate.format("YYYY-MM-DD HH:mm");
}, self);
console.log(self.startDate()); // returns '2015-08-20 14:00'
不幸的是,当提交表单时,它返回这个错误:
致命错误:未捕获的异常' exception '与消息'DateTime::__construct(): Failed to parse time string (startdate) at position 0 (s):时区无法在数据库中找到'在C:'wamp'www'iq'vendor'symfony'validator'Constraints'AbstractComparisonValidator.php第53行
我尝试将值作为JavaScript Date对象传递:
self.startDate = ko.computed(function() {
var startDate = moment(self.timesheetDate() + " " + self.startTime());
return new Date(startDate.format("YYYY-MM-DD HH:mm"));
}, self);
console.log(self.startDate()); // returns 'Thu Aug 20 2015 14:00:00 GMT+0100 (GMT Daylight Time)'
但是得到这个错误:
致命错误:未捕获的异常'异常'与消息'DateTime::__construct():未能解析时间字符串(星期四8月20日2015 14:00:00 GMT+0100 (GMT夏令时))在位置39 (D):双时区规格'在C:'wamp'www'iq'vendor'propel'propel'src' propel' Runtime'Util'PropelDateTime.php在第96行
所有的包都是最新的。
有没有人知道如何解决这个问题?
提前谢谢你。
编辑:我尝试使用:
硬编码日期$timesheet->setStartDate(date_format(date_create('2015-08-08 11:10:00'), 'Y-m-d H:i:s'));
但它没有帮助。下面是创建表单失败后print_r返回的结果:
DateTime Object ([date] => 2015-08-08 11:10:00 [timezone_type] => 3 [timezone] => Europe/London)
哪个看起来是正确的?
找出问题所在。基本上在Propel模式上有一个验证行为:
<behavior name="validate">
...
<parameter name="rule3" value="{column: enddate, validator: GreaterThan, options: {value: StartDate, message: End date is required}}" />
</behavior>
传递的是字符串"开始日期"而不是实际值。