Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/Date/Language/Amharic.pm
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ if ( $] >= 5.006 ) {
@MoYs = map { substr($_,0,3) } @MoY;
@AMPM = ( "\x{1320}\x{12cb}\x{1275}", "\x{12a8}\x{1230}\x{12d3}\x{1275}" );

@Dsuf = ("\x{129b}") x 31;
@Dsuf = ("\x{129b}") x 32;
}
else {
@DoW = (
Expand Down Expand Up @@ -73,7 +73,7 @@ else {
@MoYs = map { substr($_,0,9) } @MoY;
@AMPM = ( "ጠዋት", "ከሰዓት" );

@Dsuf = ("ኛ") x 31;
@Dsuf = ("ኛ") x 32;
}

Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Arabic.pm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
$MoYs[6] = 'يوليو';
@AMPM = qw(صباحا مساءا);

@Dsuf = ((qw(er e e e e e e e e e)) x 3, 'er'); #To be amended
@Dsuf = ((qw(er e e e e e e e e e)) x 3, 'er', 'e'); #To be amended

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Chinese.pm
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ our @DoWs = map { $_ } @DoW;
our @MoYs = map { $_ } @MoY;
our @AMPM = qw(上午 下午);

our @Dsuf = ("日") x 31;
our @Dsuf = ("日") x 32;

our ( %MoY, %DoW );
Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Chinese_GB.pm
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
"\xcf\xc2\xce\xe7", # 下午
);

@Dsuf = ("\xc8\xd5") x 31; # 日
@Dsuf = ("\xc8\xd5") x 32; # 日

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Czech.pm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ our @DoW = qw(neděle pondělí úterý středa čtvrtek pátek sobota);
our @DoWs = qw(Ne Po Út St Čt Pá So);

our @AMPM = qw(dop. odp.);
our @Dsuf = ('.') x 31;
our @Dsuf = ('.') x 32;

our ( %MoY, %DoW );
Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Dutch.pm
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ $MoYs[2] = 'mrt'; # mrt is more common (Frank Maas)

# these aren't normally used...
@AMPM = qw(VM NM);
@Dsuf = ('e') x 31;
@Dsuf = ('e') x 32;


Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Finnish.pm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ our @MoYs = @MoY;
our @DoWs = @DoW;

# the short form of ordinals
our @Dsuf = ('.') x 31;
our @Dsuf = ('.') x 32;

# doesn't look like this is normally used...
our @AMPM = qw(ap ip);
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Greek.pm
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);

@AMPM = ("πμ", "μμ");

@Dsuf = ("η") x 31;
@Dsuf = ("η") x 32;

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Hungarian.pm
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ our @MoYs = map { substr($_,0,3) } @MoY;
our @AMPM = qw(DE. DU.);

# There is no 'th or 'nd in Hungarian, just a dot
our @Dsuf = (".") x 31;
our @Dsuf = (".") x 32;

our ( %MoY, %DoW );
Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Occitan.pm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
$MoYs[6] = 'jul';
@AMPM = qw(AM PM);

@Dsuf = ((qw(er e e e e e e e e e)) x 3, 'er');
@Dsuf = ((qw(er e e e e e e e e e)) x 3, 'er', 'e');

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Romanian.pm
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);

@AMPM = qw(AM PM);

@Dsuf = ('') x 31;
@Dsuf = ('') x 32;


Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Russian.pm
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @MoY2, @DoWs2, @AMPM, @Dsuf, %MoY, %DoW);
"\xd0\xd0", # пп
);

@Dsuf = ('.') x 31;
@Dsuf = ('.') x 32;

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Russian_cp1251.pm
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
@MoYs = map { substr($_,0,3) } @MoY;
@AMPM = qw(AM PM);

@Dsuf = ('e') x 31;
@Dsuf = ('e') x 32;

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Russian_koi8r.pm
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
@MoYs = map { substr($_,0,3) } @MoY;
@AMPM = qw(AM PM);

@Dsuf = ('e') x 31;
@Dsuf = ('e') x 32;

Date::Language::_build_lookups();

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Spanish.pm
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ our @DoWs = map { substr($_,0,3) } @DoW;
our @MoYs = map { substr($_,0,3) } @MoY;
our @AMPM = qw(AM PM);

our @Dsuf = ((qw(ro do ro to to to mo vo no mo)) x 3, 'ro');
our @Dsuf = ((qw(ro do ro to to to mo vo no mo)) x 3, 'ro', 'do');

our ( %MoY, %DoW );
Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Swedish.pm
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ our @DoW = map($_ . "dagen", qw(sön mån tis ons tors fre lör));
our @DoWs = map { substr($_,0,2) } @DoW;

# the ordinals are not typically used in modern times
our @Dsuf = (('a') x 2, ('e') x 29);
our @Dsuf = (('a') x 2, ('e') x 30);

our @AMPM = @{Date::Language::English::AMPM};

Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Tigrinya.pm
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ our (@DoW, @DoWs, @MoY, @MoYs, @AMPM, @Dsuf, %MoY, %DoW);
"\x{12F5}/\x{1230}"
);

@Dsuf = ("\x{12ed}") x 31;
@Dsuf = ("\x{12ed}") x 32;

Date::Language::_build_lookups();

Expand Down
4 changes: 2 additions & 2 deletions lib/Date/Language/TigrinyaEritrean.pm
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ if ( $] >= 5.006 ) {
"\x{12F5}/\x{1230}"
);

@Dsuf = ("\x{12ed}") x 31;
@Dsuf = ("\x{12ed}") x 32;
}
else {
@DoW = (
Expand Down Expand Up @@ -77,7 +77,7 @@ else {
"ድ/ሰ"
);

@Dsuf = ("ይ") x 31;
@Dsuf = ("ይ") x 32;
}

Date::Language::_build_lookups();
Expand Down
4 changes: 2 additions & 2 deletions lib/Date/Language/TigrinyaEthiopian.pm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ if ( $] >= 5.006 ) {
"\x{12F5}/\x{1230}"
);

@Dsuf = ("\x{12ed}") x 31;
@Dsuf = ("\x{12ed}") x 32;
}
else {
@DoW = (
Expand Down Expand Up @@ -79,7 +79,7 @@ else {
"ድ/ሰ"
);

@Dsuf = ("ይ") x 31;
@Dsuf = ("ይ") x 32;
}

Date::Language::_build_lookups();
Expand Down
2 changes: 1 addition & 1 deletion lib/Date/Language/Turkish.pm
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ our %DsufMAP = (
31 => 'inci',
);

our @Dsuf = map{ $DsufMAP{$_} } sort {$a <=> $b} keys %DsufMAP;
our @Dsuf = ((map{ $DsufMAP{$_} } sort {$a <=> $b} keys %DsufMAP), '');

our ( %MoY, %DoW );
Date::Language::_build_lookups();
Expand Down
19 changes: 18 additions & 1 deletion t/lang-data.t
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ for my $lang (sort keys %expected) {
is(scalar @{"${pkg}::MoY"}, 12, "$lang: 12 month names");
is(scalar @{"${pkg}::MoYs"}, 12, "$lang: 12 short month names");
is(scalar @{"${pkg}::AMPM"}, 2, "$lang: 2 AM/PM entries");
cmp_ok(scalar @{"${pkg}::Dsuf"}, '>=', 31, "$lang: at least 31 day-suffix entries");
cmp_ok(scalar @{"${pkg}::Dsuf"}, '>=', 32, "$lang: at least 32 day-suffix entries (indices 0-31)");
}

# Regression: Austrian October abbreviation must be "Okt" (German), not "Oct" (English)
Expand Down Expand Up @@ -116,4 +116,21 @@ for my $lang (sort keys %expected) {
"Russian: Monday formats as Понедельник");
}

# Regression: format_o (%o) must produce a suffix for day 31 in all languages.
# Bug: modules with @Dsuf of only 31 elements (indices 0-30) returned undef for
# day 31 (index 31), producing a bare "31" instead of "31<suffix>".
{
# Fri Jan 31 00:00:00 2025 UTC — day 31
my $day31_time = 1738281600;

for my $lang (sort keys %expected) {
my $obj = Date::Language->new($lang);
my $result = $obj->time2str('%o', $day31_time, 'GMT');
# Result must start with "31" and must not emit an undef warning.
# Languages with empty suffix (e.g. Romanian) produce "31" — that's fine,
# but it must be the empty string '', not undef.
like($result, qr/^\s*31/, "$lang: format_o day 31 produces output");
}
}

done_testing;
Loading