假设我已经给出了两个日期,如果差异是一个月那么它应该显示为30天。甚至几个月也需要转换为几天 我尝试过age(date,now():: timestamp没有时区),但是它给出了months-dates-years格式。例如:10个星期二24天13:57:40.5265。但我需要遵循以下方式。 例如,如果有两个月的差异,那么我需要60天的输出。
答案 0 :(得分:2)
不要使用age()
函数进行日期/时间算术。它只有returns "symbolic" results(对于人类表示来说足够好,但对于日期/时间计算几乎毫无意义;与标准差异相比)。
标准difference operator (-
)会返回date
,timestamp
和timestamp with time zone
的基于日期的结果(前者将天数作为int
返回,后两者返回基于日期的interval
s):
从基于日期的时间间隔开始,您可以使用extract()
函数提取日期:
select current_date - '2017-01-01',
extract(day from now()::timestamp - '2017-01-01 00:00:00'),
extract(day from now() - '2017-01-01 00:00:00Z');
答案 1 :(得分:0)
这两个都会给出结果。
select make_interval(days => ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer)::text;
select format('%1$s days', ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer);