【问题标题】:How to insert PostgreSQL timestamp with Laravel model如何使用 Laravel 模型插入 PostgreSQL 时间戳
【发布时间】:2013-11-21 05:20:56
【问题描述】:

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

【问题讨论】:

    标签: php postgresql laravel


    【解决方案1】:

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

    例子

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        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');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多