2

我将 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 自动填充的日期生成时间戳,没有问题。

4

3 回答 3

1

strtotime在尝试保存之前,您必须将您的结果转换为 MySQL 格式。您可以使用该date功能执行此操作。

例子

date('Y-m-d H:i:s', strtotime('some time'))

于 2013-11-11T13:32:40.963 回答
0

似乎使用 strtotime 创建的 Unix 时间戳没有正确转换,但真正的 PHP DateTime 对象可以正常工作。

我切换到使用具有相同参数的date_create ,我可以直接插入它而不使用 DB::raw。

于 2013-11-09T03:19:24.760 回答
0

strtotime() 的文档说

该函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳

通常在 SQL 数据库中,时间戳并不意味着 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');
于 2013-11-09T03:19:36.903 回答