【发布时间】:2015-08-20 13:47:20
【问题描述】:
我有一个返回日期/时间值的表单。这是相关位的代码(它是网站使用的 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(): 无法在位置 0 (s) 解析时间字符串 (startdate): 在 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)'
但是得到这个错误:
致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct(): 无法在位置 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 对象([date] => 2015-08-08 11:10:00 [timezone_type] => 3 [timezone] => Europe/London)
这似乎是正确的?所以我真的不知道为什么我会收到错误。
【问题讨论】:
-
您的后端期望什么格式?您是否尝试过使用 ISO 8601 日期格式?
startDate.format()将以 iso 格式返回日期 -
@AnishPatel 它期待'Y-m-d H:i:s'
-
您正在使用
YYYY-MM-DD HH:mm,它缺少秒数。此外,第一个异常表明需要时区,请在格式字符串中使用Z。尝试YYYY-MM-DD HH:mm:ssZ,或者尝试我的第一个使用 ISO 格式的建议,我看不到标准日期时间库无法识别 ISO 日期。 -
@AnishPatel 试图这样做但无济于事。这是 print_r 在尝试提交表单后返回的内容,如果它有帮助的话:
[startdate:protected] => DateTime Object ( [date] => 2015-08-20 16:00:00 [timezone_type] => 1 [timezone] => +01:00 ) [enddate:protected] => DateTime Object ( [date] => 2015-08-20 16:45:00 [timezone_type] => 1 [timezone] => +01:00 ) -
你试过
new Date(startDate.format("YYYY-MM-DD HH:mm")).toISOString()吗?
标签: javascript php symfony datetime knockout.js