Re: Getting number of days in a month - Mailing list pgsql-general

From Guillaume Perréal
Subject Re: Getting number of days in a month
Date
Msg-id 38F57634.6CBE3408@lyon.cemagref.fr
Whole thread Raw
In response to Re: Getting number of days in a month  (Ken Causey <ken@premiernet.net>)
Responses Re: Getting number of days in a month
List pgsql-general
Ken Causey wrote:
>
> Here's my perl implementation:
>
> #######################################
> #
> #  lastday( month, year (4 digit) )
> #
> #  Returns: last day of the month
> #
> #######################################
>
> sub lastday {
>    my $month=shift;
>    my $year= shift;
>
>    $month--;
>
>    my @days = (31,0,31,30,31,30,31,31,30,31,30,31);
>
>    if($days[$month] != 0){
>       return $days[$month];
>    } else {
>    # It's Feb, test for leap year
>       if($year % 4 != 0){
>          return 28;
>       } elsif($year % 400 == 0){
>          return 29;
>       } elsif($year % 100 == 0){
>          return 28;
>       } else {
>          return 29;
>       }
>    }
> }
>
> Ken Causey
> ineffable
>
> At 02:26 PM 4/12/00 +0200, you wrote:
> >To obtain the number of days in a month, I wrote this function:
> >
> >CREATE FUNCTION dayCountOfMonth(datetime) RETURNS float AS
> >'      DECLARE
> >               theDate         ALIAS FOR $1;
> >               monthStart      date;
> >               monthEnd        date;
> >       BEGIN
> >               monthStart := DATE_TRUNC(''month'', theDate);
> >               monthEnd := monthStart + ''1 month''::timespan - ''1 day''::timespan;
> >               RETURN DATE_PART(''doy'', monthEnd) - DATE_PART(''doy'', monthStart) + 1;
> >       END;
> >'      LANGUAGE 'PL/pgSQL';
> >
> >It seems to work, except with the month of October (10).
> >
> >dayCountOfMonth('1997-10-1') => 30
> >dayCountOfMonth('1998-10-1') => 30
> >dayCountOfMonth('1999-10-1') => 31
> >dayCountOfMonth('2000-10-1') => 30
> >dayCountOfMonth('2001-10-1') => 30
> >dayCountOfMonth('2002-10-1') => 30
> >dayCountOfMonth('2003-10-1') => 30
> >dayCountOfMonth('2004-10-1') => 31
> >
> >Just one question: WHY??????
> >(Note: no trouble with February)
> >
> >Is there a function that give the number of days of a month?
> >
> >Thanks,
> >
> >Guillaume Perréal - Stagiaire MIAG
> >Cemagref (URH), Lyon, France
> >Tél: (+33) 4.72.20.87.64
> >
> >

Thanks, I rewrote my function to solve my problem.

In fact, the problem is that ('2000-10-01'::datetime + '1 month'::interval)
gives '2000-10-31' instead of '2000-11-01'.
I think it's a bug, isn't it?

Guillaume Perréal - Stagiaire MIAG
Cemagref (URH), Lyon, France
Tél: (+33) 4.72.20.87.64

pgsql-general by date:

Previous
From: "Aida Mehmedovic"
Date:
Subject: Performance of PostgreSQL database
Next
From: "omid omoomi"
Date:
Subject: Re: PHP-Postgres link