我正在使用Laravel 4和PostgreSQL。我使用迁移创建了PostgreSQL时间戳字段:
$table->dateTime('start_date');
我尝试插入使用 strtotime 生成的时间戳并收到错误:
Invalid datetime format: 7 ERROR: invalid input syntax for type timestamp: "1383321600"
黑客攻击它的工作原理:
new MyModel(array('start_date' => DB::raw("to_timestamp($start_date)")));
似乎应该有更好的方法。 Laravel本身为created_at和updated_at自动填充的日期生成时间戳而没有问题。
答案 0 :(得分:1)
在尝试保存之前,您必须将strtotime
的结果转换为MySQL格式。您可以使用date
功能执行此操作。
实施例
date('Y-m-d H:i:s', strtotime('some time'))
答案 1 :(得分:0)
似乎用strtotime创建的Unix时间戳未正确转换,但真正的PHP DateTime对象工作正常。
我转而使用date_create使用相同的参数,我可以直接插入它而不使用DB :: raw。
答案 2 :(得分:0)
doc for strtotime()说
该函数期望给出一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳
在SQL数据库中, timestamp 并不意味着Unix时间戳。在SQL中,如果要使用标准SQL将时间戳插入表中,则可以这样做。
-- Implicit use
insert into table_name (column_name)
values ('2013-01-01 08:00:00');
-- Explicit use
insert into table_name (column_name)
values (timestamp '2013-01-01 08:00:00');