我有一个返回日期/时间值的表单。这是相关位的代码(它在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'
不幸的是,在提交表单时,它会返回以下错误:
致命错误:未捕获的异常'异常' with message' DateTime :: __ construct():无法解析位置0(s)的时间字符串(startdate):在数据库中找不到时区'在第53行的C:\ wamp \ www \ iq \ vendor \ symfony \ validator \ Constraints \ AbstractComparisonValidator.php
我尝试将值作为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)'
但是得到这个错误:
致命错误:未捕获的异常'异常' with message' DateTime :: __ construct():无法解析时间字符串(2015年8月20日14:00:00 GMT + 0100(格林威治标准时间夏令时))位置39(D):双时区规范'在第96行的C:\ wamp \ www \ iq \ vendor \ propel \ propel \ src \ Propel \ Runtime \ Util \ PropelDateTime.php
所有套餐都是最新的。
有没有人知道如何解决这个问题?
提前谢谢。
修改:我尝试使用以下方法对日期进行硬编码:
$timesheet->setStartDate(date_format(date_create('2015-08-08 11:10:00'), 'Y-m-d H:i:s'));
但它没有帮助。以下是在表单无法创建后print_r返回的内容:
DateTime对象([date] => 2015-08-08 11:10:00 [timezone_type] => 3 [timezone] =>欧洲/伦敦)
哪个看似正确?所以我真的不知道为什么我会收到错误。
答案 0 :(得分:0)
找出问题所在。基本上,Propel架构上存在验证行为:
<behavior name="validate">
...
<parameter name="rule3" value="{column: enddate, validator: GreaterThan, options: {value: StartDate, message: End date is required}}" />
</behavior>
传递字符串“StartDate”而不是实际值。删除它解决了这个问题。