php - 如何在 postgresql 上使用 unix 时间戳

标签 php postgresql unix-timestamp

我必须使用 postgres 数据库 9.4,并且我想使用时间戳。 第一个“问题”是当我在 postgres 上创建一个时间戳列时,我不知道它在内部做了什么但是当我查询它时它返回“2010-10-30 00:00:00”

对我来说,时间戳是这样的 12569537329(unix 时间戳)。

我这么说是因为是整数或 float ,计算机处理起来比字符串要容易得多,而且每个国家都有自己的时间格式,unix时间戳是数字,故事结束。

从 php 查询结果是一个字符串,所以我不得不做一堆杂耍,并且由于时区、夏令时和其他因素可能会出错。

我搜索了很多,但找不到在 postgresql 上使用 unix 时间戳的方法。

有人可以解释一下是否有办法或正确的工作方式并尽可能接近 unix 时间戳。

更新

我发现它对我有帮助并且花了很长时间才发现在 postgresql 上可行的一件事是更改Interval Output

pg manual

在 php 中,月份的日期间隔是“月”,对于 pg 来说,在 php 中是“mon”,它将把 mon 理解为星期一。 我认为如果你不得不兼顾太多,那你就做错了。 很高兴 postgres 让我们改变 session 或永久的行为。 所以将 intervalstyle 设置为 iso_8601 它将作为 php 工作iso_8601并将输出 P1M

最佳答案

只需将 unix time_t 转换为时间戳,然后在 postgres 中使用它:

CREATE TABLE omg
        ( seq SERIAL NOT NULL PRIMARY KEY
        , stampthing TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
        );

INSERT INTO omg(stampthing) SELECT now();

INSERT INTO omg(stampthing) VALUES
 ('epoch'::timestamptz )
 , ('epoch'::timestamptz + 12569537329 * '1 second'::interval)
        ;

SELECT stampthing
        , DATE_PART('epoch',stampthing) AS original
FROM omg;

输出:

CREATE TABLE
INSERT 0 1
INSERT 0 2
          stampthing           |     original     
-------------------------------+------------------
 2016-01-20 16:08:12.646172+01 | 1453302492.64617
 1970-01-01 01:00:00+01        |                0
 2368-04-24 20:08:49+02        |      12569537329
(3 rows)

关于php - 如何在 postgresql 上使用 unix 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901804/

相关文章:

php - 本地主机子文件夹 PHP

php - 除以零 - 数字小于一的 php 模数

sql - PostgreSQL 在 JSONB 数据中以文本形式查找和替换

java - 如何从 configuration.buildSessionFactory (PSQL) 捕获密码错误?

sql - postgresql如何查询用户组权限?

javascript - 使用验证插件 jquery 验证输入数组 - 显示每个输入的错误

PHP:按值长度对数组进行排序

php - strtotime() 未转换为时间戳

coldfusion - 将 ColdFusion 日期转换为 Unix 时间戳

c++ - 转换为 unix 时间戳不正确