Bug 12669: Use floating timezone when handling dates without hours, minutes and seconds.

Test plan:

1. Create a new serial record or pick an existing one;
2. Add a "New subscription" and set the "First issue publication date"
   and "Frequency" values so that the "Planned date" for a given issue
   hits a day where a transition to Daylight Saving Time (DST) occurs

   ex:. 1979-04-01 in Europe/Lisbon (http://www.timeanddate.com/time/change/portugal/lisbon?year=1979)
   ... use this website page as a source http://www.timeanddate.com/time/dst/2014.html
   to find a suitable transition to DST in your timezone in the current year.

3. From the "Subscription detail" page in Koha for the given record click
   the "Serial collection" link on the left side context menu.

Expected result:
Prior to applying the patch the error described in this bug report should occur.
After the patch is applied the "Serial collection" page should load correctly.

Signed-off-by: Colin Campbell <colin.campbell@ptfs-europe.com>
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
Rolando Isidoro 2014-08-01 09:42:30 +01:00 committed by Tomas Cohen Arazi
parent 07f9dd9f8c
commit e8f9000fcc
2 changed files with 8 additions and 2 deletions

View File

@ -129,7 +129,10 @@ sub output_pref {
return unless defined $dt;
# FIXME: see bug 13242 => no TZ for dates 'infinite'
$dt->set_time_zone( C4::Context->tz ) if $dt->ymd !~ /^9999/;
if ( $dt->ymd !~ /^9999/ ) {
my $tz = $dateonly ? DateTime::TimeZone->new(name => 'floating') : C4::Context->tz;
$dt->set_time_zone( $tz );
}
my $pref =
defined $force_pref ? $force_pref : C4::Context->preference('dateformat');

View File

@ -29,7 +29,10 @@ sub filter {
my ( $self, $text, $args, $config ) = @_;
return "" unless $text;
$config->{with_hours} //= 0;
my $dt = dt_from_string( $text, 'iso' );
my $tz = DateTime::TimeZone->new(name => 'floating') unless $config->{with_hours};
my $dt = dt_from_string( $text, 'iso', $tz );
return $config->{as_due_date} ?
output_pref({ dt => $dt, as_due_date => 1 }) :
output_pref({ dt => $dt, dateonly => !$config->{with_hours} });