无法解析时间字符串...:双时区规范

时间:2015-08-20 13:47:20

标签: javascript php symfony datetime knockout.js

我有一个返回日期/时间值的表单。这是相关位的代码(它在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] =>欧洲/伦敦)

哪个看似正确?所以我真的不知道为什么我会收到错误。

1 个答案:

答案 0 :(得分:0)

找出问题所在。基本上,Propel架构上存在验证行为:

<behavior name="validate">
...
<parameter name="rule3" value="{column: enddate, validator: GreaterThan, options: {value: StartDate, message: End date is required}}" />
</behavior>

传递字符串“StartDate”而不是实际值。删除它解决了这个问题。