diff options
-rwxr-xr-x | LedgerSMB/Form.pm | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/LedgerSMB/Form.pm b/LedgerSMB/Form.pm index becea191..699c8695 100755 --- a/LedgerSMB/Form.pm +++ b/LedgerSMB/Form.pm @@ -1362,6 +1362,16 @@ sub print_button { sub db_init { my ($self, $myconfig) = @_; $self->{dbh} = $self->dbconnect_noauto($myconfig) || $self->dberror(); + %date_query = ( + 'mm/dd/yy' => 'set DateStyle to \'SQL, US\'', + 'mm-dd-yy' => 'set DateStyle to \'POSTGRES, US\'', + 'dd/mm/yy' => 'set DateStyle to \'SQL, EUROPEAN\'', + 'dd-mm-yy' => 'set DateStyle to \'POSTGRES, EUROPEAN\'', + 'dd.mm.yy' => 'set DateStyle to \'GERMAN\'' + ); + + $self->{dbh}->do($date_query{$myconfig->{dateformat}}); + $self->{db_dateformat} = $myconfig->{dateformat}; #shim my $query = "SELECT t.extends, @@ -2984,32 +2994,47 @@ sub split_date { ($rv, $yy, $mm, $dd); } +sub format_date { + # takes an iso date in, and converts it to the date for printing + my ($self, $date) = @_; + my $datestring; + if ($date =~ /^\d{4}\D/){ # is an ISO date + $datestring = $self->{db_dateformat}; + my ($yyyy, $mm, $dd) = split(/\W/, $date); + $datestring =~ s/y+/$yyyy/; + $datestring =~ s/mm/$mm/; + $datestring =~ s/dd/$dd/; + } else { # return date + $datestring = $date; + } + $datestring; +} sub from_to { - my ($self, $yy, $mm, $interval) = @_; + my ($self, $yyyy, $mm, $interval) = @_; my @t; my $dd = 1; - my $fromdate = "$yy${mm}01"; + my $fromdate = "$yyyy-${mm}-01"; my $bd = 1; if (defined $interval) { if ($interval == 12) { - $yy++; + $yyyy++; } else { if (($mm += $interval) > 12) { $mm -= 12; - $yy++; + $yyyy++; } if ($interval == 0) { @t = localtime(time); $dd = $t[3]; $mm = $t[4] + 1; - $yy = $t[5] + 1900; + $yyyy = $t[5] + 1900; $bd = 0; } } @@ -3018,19 +3043,20 @@ sub from_to { if (++$mm > 12) { $mm -= 12; - $yy++; + $yyyy++; } } $mm--; - @t = localtime(Time::Local::timelocal(0,0,0,$dd,$mm,$yy) - $bd); + @t = localtime(Time::Local::timelocal(0,0,0,$dd,$mm,$yyyy) - $bd); $t[4]++; $t[4] = substr("0$t[4]",-2); $t[3] = substr("0$t[3]",-2); $t[5] += 1900; - ($fromdate, "$t[5]$t[4]$t[3]"); + ($self->format_date($fromdate), + $self->format_date("$t[5]-$t[4]-$t[3]")); } |