View | Details | Raw Unified | Return to bug 12669
Collapse All | Expand All

(-)a/Koha/DateUtils.pm (-6 / +16 lines)
Lines 58-66 sub dt_from_string { Link Here
58
    return DateTime::Format::DateParse->parse_datetime($date_string)
58
    return DateTime::Format::DateParse->parse_datetime($date_string)
59
        if $date_string and $date_string =~ /^9999-/;
59
        if $date_string and $date_string =~ /^9999-/;
60
60
61
    if ( !$tz ) {
61
    my $dt;
62
        $tz = C4::Context->tz;
62
    $tz ||= C4::Context->tz;
63
    }
64
    if ( !$date_format ) {
63
    if ( !$date_format ) {
65
        $date_format = C4::Context->preference('dateformat');
64
        $date_format = C4::Context->preference('dateformat');
66
    }
65
    }
Lines 89-98 s/(\d{4})(\d{2})(\d{2})\s+(\d{2})(\d{2})(\d{2})/$1-$2-$3T$4:$5:$6/; Link Here
89
                $date_string =~ s/00T/01T/;
88
                $date_string =~ s/00T/01T/;
90
            }
89
            }
91
        }
90
        }
92
        return DateTime::Format::DateParse->parse_datetime( $date_string,
91
93
            $tz->name() );
92
        $dt = eval {
93
            DateTime::Format::DateParse->parse_datetime( $date_string,
94
                $tz->name() );
95
        };
96
        if ($@) {
97
            $tz = DateTime::TimeZone->new( name => 'floating' );
98
            $dt = DateTime::Format::DateParse->parse_datetime( $date_string,
99
                $tz->name() );
100
        }
101
    } else {
102
        $dt = DateTime->now( time_zone => $tz );
94
    }
103
    }
95
    return DateTime->now( time_zone => $tz );
104
105
    return $dt;
96
106
97
}
107
}
98
108
(-)a/Koha/Template/Plugin/KohaDates.pm (-2 / +1 lines)
Lines 30-37 sub filter { Link Here
30
    return "" unless $text;
30
    return "" unless $text;
31
    $config->{with_hours} //= 0;
31
    $config->{with_hours} //= 0;
32
32
33
    my $tz = DateTime::TimeZone->new(name => 'floating') unless $config->{with_hours};
33
    my $dt = dt_from_string( $text, 'iso' );
34
    my $dt = dt_from_string( $text, 'iso', $tz );
35
34
36
    return $config->{as_due_date} ?
35
    return $config->{as_due_date} ?
37
        output_pref({ dt => $dt, as_due_date => 1 }) :
36
        output_pref({ dt => $dt, as_due_date => 1 }) :
(-)a/t/DateUtils.t (-1 / +21 lines)
Lines 3-9 use DateTime; Link Here
3
use DateTime::TimeZone;
3
use DateTime::TimeZone;
4
4
5
use C4::Context;
5
use C4::Context;
6
use Test::More tests => 42;
6
use Test::More tests => 44;
7
use Test::MockModule;
7
use Test::MockModule;
8
use Time::HiRes qw/ gettimeofday /;
8
use Time::HiRes qw/ gettimeofday /;
9
9
Lines 162-164 cmp_ok $date_string, 'eq', '12/11/2013 06:35 PM', 'as_due_date with hours and ti Link Here
162
162
163
my $now = DateTime->now;
163
my $now = DateTime->now;
164
is( dt_from_string, $now, "Without parameter, dt_from_string should return today" );
164
is( dt_from_string, $now, "Without parameter, dt_from_string should return today" );
165
166
$module_context->mock(
167
    'tz',
168
    sub {
169
        return DateTime::TimeZone->new( name => 'Europe/Lisbon' );
170
    }
171
);
172
173
$dt = dt_from_string('1979-04-01');
174
isa_ok( $dt, 'DateTime', 'dt_from_string should return a DateTime object if a DST is given' );
175
176
$module_context->mock(
177
    'tz',
178
    sub {
179
        return DateTime::TimeZone->new( name => 'Europe/Paris' );
180
    }
181
);
182
183
$dt = dt_from_string('2014-03-30 02:00:00');
184
isa_ok( $dt, 'DateTime', 'dt_from_string should return a DateTime object if a DST is given' );
(-)a/t/db_dependent/Koha_template_plugin_KohaDates.t (-6 / +25 lines)
Lines 1-16 Link Here
1
#!/usr/bin/perl
1
#!/usr/bin/perl
2
#
3
2
4
use strict;
3
use Modern::Perl;
5
use warnings;
6
use C4::Context;
4
use C4::Context;
7
use C4::Dates;
5
use C4::Dates;
8
use Test::More tests => 5;
6
use Test::More tests => 7;
7
use Test::MockModule;
9
8
10
BEGIN {
9
BEGIN {
11
        use_ok('Koha::Template::Plugin::KohaDates');
10
        use_ok('Koha::Template::Plugin::KohaDates');
12
}
11
}
13
12
13
my $module_context = new Test::MockModule('C4::Context');
14
14
my $date = "1973-05-21";
15
my $date = "1973-05-21";
15
my $context = C4::Context->new();
16
my $context = C4::Context->new();
16
my $dateobj = C4::Dates->new();
17
my $dateobj = C4::Dates->new();
Lines 18-24 my $dateobj = C4::Dates->new(); Link Here
18
my $filter = Koha::Template::Plugin::KohaDates->new();
19
my $filter = Koha::Template::Plugin::KohaDates->new();
19
ok ($filter, "new()");
20
ok ($filter, "new()");
20
21
21
22
$context->set_preference( "dateformat", 'iso' );
22
$context->set_preference( "dateformat", 'iso' );
23
$context->clear_syspref_cache();
23
$context->clear_syspref_cache();
24
$dateobj->reset_prefformat;
24
$dateobj->reset_prefformat;
Lines 40-42 $dateobj->reset_prefformat; Link Here
40
40
41
$filtered_date = $filter->filter($date);
41
$filtered_date = $filter->filter($date);
42
is ($filtered_date,'21/05/1973', "metric conversion") or diag ("metric conversion fails $filtered_date");
42
is ($filtered_date,'21/05/1973', "metric conversion") or diag ("metric conversion fails $filtered_date");
43
- 
43
44
$module_context->mock(
45
    'tz',
46
    sub {
47
        return DateTime::TimeZone->new( name => 'Europe/Lisbon' );
48
    }
49
);
50
51
$filtered_date = $filter->filter('1979-04-01');
52
is( $filtered_date, '01/04/1979', 'us: dt_from_string should return the valid date if a DST is given' );
53
54
$module_context->mock(
55
    'tz',
56
    sub {
57
        return DateTime::TimeZone->new( name => 'Europe/Paris' );
58
    }
59
);
60
61
$filtered_date = $filter->filter('2014-03-30 02:00:00');
62
is( $filtered_date, '30/03/2014', 'us: dt_from_string should return a DateTime object if a DST is given' );

Return to bug 12669