如何根据日期获取月份的天数?

Posted

技术标签:

【中文标题】如何根据日期获取月份的天数?【英文标题】:How to get number of days in month based on date? 【发布时间】:2016-02-11 08:09:43 【问题描述】:

有没有办法以YYYY-MM-DD 格式从日期中提取本月有多少天?

示例:

对于2016-02-05,它将给出29(2016 年 2 月有 29 天)

对于2016-03-12,它将给出31

对于2015-02-05,它将给出28(2015 年 2 月有 28 天)

我正在使用 PostgreSQL

编辑:

LAST_DAY function in postgres 不是我想要的。它返回 DATE 而我期望一个整数

【问题讨论】:

LAST_DAY function in postgres的可能重复 @sagi 这没有回答我的问题。 @java 可能与How to get the number of days in a month in postgresql重复 【参考方案1】:

实现这一点的一种方法是从当月的月初减去下个月的月初:

db=> SELECT DATE_TRUNC('MONTH', '2016-02-05'::DATE + INTERVAL '1 MONTH') - 
            DATE_TRUNC('MONTH', '2016-02-05'::DATE);
 ?column? 
----------
 29 days
(1 row)

【讨论】:

【参考方案2】:

今天刚需要这个,似乎我想出了与 Mureinik 几乎相同的方法,只是我需要它是数字的。 (PostgreSQL 不能直接从区间转换为数字)

上个月

select CAST(to_char(date_trunc('month', current_date) - (date_trunc('month', current_date) - interval '1 month'),'dd') as integer)

当月

select CAST(to_char(date_trunc('month', current_date) + interval '1 month' - date_trunc('month', current_date), 'dd') as integer)

【讨论】:

【参考方案3】:

你可以试试下一个:

SELECT  
  DATE_PART('days', 
    DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD')) 
    + '1 MONTH'::INTERVAL 
    - DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD'))
  );

注意:这里的日期被使用了两次。并使用了转换函数TO_DATE

【讨论】:

以上是关于如何根据日期获取月份的天数?的主要内容,如果未能解决你的问题,请参考以下文章

PHP日期操作类代码-农历-阳历转换闰年计算天数等

PHP阴历阳历转换

怎样得到当前月份的天数(Java)?

PHP 如何获取两个时间之间的年和月份及间隔天数 PHP两个日期之间的所有日期

JS 如何获取当前上一个月下一个月和月份所含天数

日期根据天数变化但其他月份不起作用