summaryrefslogtreecommitdiff
path: root/lib/Date/Manip/Date.pm
diff options
context:
space:
mode:
authorSullivan Beck <sbeck@cpan.org>2015-06-01 09:31:48 -0400
committerSullivan Beck <sbeck@cpan.org>2015-06-01 09:31:48 -0400
commite8ea0597251bffde3125209f9096d2fe0276fa9b (patch)
tree6c756e2a211d321cc66097c7bbb87d03509f9e23 /lib/Date/Manip/Date.pm
parent5fa55ae65faf35ad199e3f4eab81589e24413d0e (diff)
Release: 6.50
Diffstat (limited to 'lib/Date/Manip/Date.pm')
-rw-r--r--lib/Date/Manip/Date.pm422
1 files changed, 277 insertions, 145 deletions
diff --git a/lib/Date/Manip/Date.pm b/lib/Date/Manip/Date.pm
index 5a0e5d878..7d11523ea 100644
--- a/lib/Date/Manip/Date.pm
+++ b/lib/Date/Manip/Date.pm
@@ -58,10 +58,9 @@ sub _init {
# The date in the parsed timezone
'date' => [], # the parsed date split
'def' => [0,0,0,0,0,0],
-
- # 1 for each field that came from
- # defaults rather than parsed
- # '' for an implied field
+ # 1 for each field that came from
+ # defaults rather than parsed
+ # '' for an implied field
'tz' => '', # the timezone of the date
'isdst' => '', # 1 if the date is in DST.
'offset' => [], # The offset from GMT
@@ -112,6 +111,7 @@ sub parse {
my $dmt = $$self{'tz'};
my $dmb = $$dmt{'base'};
+ delete $$self{'data'}{'default_time'};
my($done,$y,$m,$d,$h,$mn,$s,$tzstring,$zone,$abb,$off,$dow,$got_time,
$default_time,$firsterr);
@@ -305,7 +305,10 @@ sub parse {
if (! $got_time) {
if ($default_time) {
- if ($dmb->_config('defaulttime') eq 'midnight') {
+ if (exists $$self{'data'}{'default_time'}) {
+ ($h,$mn,$s) = @{ $$self{'data'}{'default_time'} };
+ delete $$self{'data'}{'default_time'};
+ } elsif ($dmb->_config('defaulttime') eq 'midnight') {
($h,$mn,$s) = (0,0,0);
} else {
($h,$mn,$s) = $dmt->_now('time',$noupdate);
@@ -477,6 +480,16 @@ sub _parse_date {
}
}
+ # Parse truncated dates
+
+ if (! $dow && ! $of) {
+ (@tmp) = $self->_parse_date_truncated($string,$noupdate);
+ if (@tmp) {
+ ($y,$m,$d,$dow) = @tmp;
+ last PARSE;
+ }
+ }
+
return ();
}
@@ -1095,46 +1108,52 @@ sub _iso8601_rx {
my $yod = '(?<yod>\d)';
my $cc = '(?<c>\d\d)';
- my $cdaterx =
- "${y4}${m}${d}|" . # CCYYMMDD
- "${y4}\\-${m}\\-${d}|" . # CCYY-MM-DD
- "\\-${y2}${m}${d}|" . # -YYMMDD
- "\\-${y2}\\-${m}\\-${d}|" . # -YY-MM-DD
- "\\-?${y2}${m}${d}|" . # YYMMDD
- "\\-?${y2}\\-${m}\\-${d}|" . # YY-MM-DD
- "\\-\\-${m}\\-?${d}|" . # --MM-DD --MMDD
- "\\-\\-\\-${d}|" . # ---DD
-
- "${y4}\\-?${doy}|" . # CCYY-DoY CCYYDoY
- "\\-?${y2}\\-?${doy}|" . # YY-DoY -YY-DoY
- # YYDoY -YYDoY
- "\\-${doy}|" . # -DoY
-
- "${y4}W${w}${dow}|" . # CCYYWwwD
- "${y4}\\-W${w}\\-${dow}|" . # CCYY-Www-D
- "\\-?${y2}W${w}${dow}|" . # YYWwwD -YYWwwD
- "\\-?${y2}\\-W${w}\\-${dow}|" . # YY-Www-D -YY-Www-D
-
- "\\-?${yod}W${w}${dow}|" . # YWwwD -YWwwD
- "\\-?${yod}\\-W${w}\\-${dow}|" . # Y-Www-D -Y-Www-D
- "\\-W${w}\\-?${dow}|" . # -Www-D -WwwD
- "\\-W\\-${dow}|" . # -W-D
- "\\-\\-\\-${dow}"; # ---D
+ my @cdaterx =
+ (
+ "${y4}${m}${d}", # CCYYMMDD
+ "${y4}\\-${m}\\-${d}", # CCYY-MM-DD
+ "\\-${y2}${m}${d}", # -YYMMDD
+ "\\-${y2}\\-${m}\\-${d}", # -YY-MM-DD
+ "\\-?${y2}${m}${d}", # YYMMDD
+ "\\-?${y2}\\-${m}\\-${d}", # YY-MM-DD
+ "\\-\\-${m}\\-?${d}", # --MM-DD --MMDD
+ "\\-\\-\\-${d}", # ---DD
+
+ "${y4}\\-?${doy}", # CCYY-DoY CCYYDoY
+ "\\-?${y2}\\-?${doy}", # YY-DoY -YY-DoY
+ # YYDoY -YYDoY
+ "\\-${doy}", # -DoY
+
+ "${y4}W${w}${dow}", # CCYYWwwD
+ "${y4}\\-W${w}\\-${dow}", # CCYY-Www-D
+ "\\-?${y2}W${w}${dow}", # YYWwwD -YYWwwD
+ "\\-?${y2}\\-W${w}\\-${dow}", # YY-Www-D -YY-Www-D
+
+ "\\-?${yod}W${w}${dow}", # YWwwD -YWwwD
+ "\\-?${yod}\\-W${w}\\-${dow}", # Y-Www-D -Y-Www-D
+ "\\-W${w}\\-?${dow}", # -Www-D -WwwD
+ "\\-W\\-${dow}", # -W-D
+ "\\-\\-\\-${dow}", # ---D
+ );
+ my $cdaterx = join('|',@cdaterx);
$cdaterx = qr/(?:$cdaterx)/i;
- my $tdaterx =
- "${y4}\\-${m}|" . # CCYY-MM
- "${y4}|" . # CCYY
- "\\-${y2}\\-?${m}|" . # -YY-MM -YYMM
- "\\-${y2}|" . # -YY
- "\\-\\-${m}|" . # --MM
-
- "${y4}\\-?W${w}|" . # CCYYWww CCYY-Www
- "\\-?${y2}\\-?W${w}|" . # YY-Www YYWww
- # -YY-Www -YYWww
- "\\-?W${w}|" . # -Www Www
-
- "${cc}"; # CC
+ my @tdaterx =
+ (
+ "${y4}\\-${m}", # CCYY-MM
+ "${y4}", # CCYY
+ "\\-${y2}\\-?${m}", # -YY-MM -YYMM
+ "\\-${y2}", # -YY
+ "\\-\\-${m}", # --MM
+
+ "${y4}\\-?W${w}", # CCYYWww CCYY-Www
+ "\\-?${y2}\\-?W${w}", # YY-Www YYWww
+ # -YY-Www -YYWww
+ "\\-?W${w}", # -Www Www
+
+ "${cc}", # CC
+ );
+ my $tdaterx = join('|',@tdaterx);
$tdaterx = qr/(?:$tdaterx)/i;
$$dmb{'data'}{'rx'}{'iso'}{'cdate'} = $cdaterx;
@@ -1155,24 +1174,30 @@ sub _iso8601_rx {
my $zrx = $dmt->_zrx('zrx');
- my $ctimerx =
- "${hh}${mn}${ss}${fs}?|" . # HHMNSS[,S+]
- "${hh}:${mn}:${ss}${fs}?|" . # HH:MN:SS[,S+]
- "${hh}:?${mn}${fm}|" . # HH:MN,M+ HHMN,M+
- "${hh}${fh}|" . # HH,H+
- "\\-${mn}:?${ss}${fs}?|" . # -MN:SS[,S+] -MNSS[,S+]
- "\\-${mn}${fm}|" . # -MN,M+
- "\\-\\-${ss}${fs}?|" . # --SS[,S+]
- "${hh}:?${mn}|" . # HH:MN HHMN
- "${h24a}|" . # 24:00:00 24:00 24
- "${h24b}|" . # 240000 2400
- "${h}:${mn}:${ss}${fs}?|" . # H:MN:SS[,S+]
- "${h}:${mn}${fm}"; # H:MN,M+
+ my @ctimerx =
+ (
+ "${hh}${mn}${ss}${fs}?", # HHMNSS[,S+]
+ "${hh}:${mn}:${ss}${fs}?", # HH:MN:SS[,S+]
+ "${hh}:?${mn}${fm}", # HH:MN,M+ HHMN,M+
+ "${hh}${fh}", # HH,H+
+ "\\-${mn}:?${ss}${fs}?", # -MN:SS[,S+] -MNSS[,S+]
+ "\\-${mn}${fm}", # -MN,M+
+ "\\-\\-${ss}${fs}?", # --SS[,S+]
+ "${hh}:?${mn}", # HH:MN HHMN
+ "${h24a}", # 24:00:00 24:00 24
+ "${h24b}", # 240000 2400
+ "${h}:${mn}:${ss}${fs}?", # H:MN:SS[,S+]
+ "${h}:${mn}${fm}", # H:MN,M+
+ );
+ my $ctimerx = join('|',@ctimerx);
$ctimerx = qr/(?:$ctimerx)(?:\s*$zrx)?/;
- my $ttimerx =
- "${hh}|" . # HH
- "\\-${mn}"; # -MN
+ my @ttimerx =
+ (
+ "${hh}", # HH
+ "\\-${mn}", # -MN
+ );
+ my $ttimerx = join('|',@ttimerx);
$ttimerx = qr/(?:$ttimerx)/;
$$dmb{'data'}{'rx'}{'iso'}{'ctime'} = $ctimerx;
@@ -1380,41 +1405,51 @@ sub _other_rx {
# How to express the time
# matches = (H, FH, MN, FMN, S, AM, TZSTRING, ZONE, ABB, OFF, ABB)
- my $timerx;
+ my @timerx;
for (my $i=0; $i<=$#hm; $i++) {
my $hm = $hm[$i];
my $ms = $ms[$i];
- $timerx .= "${h12}$hm${mn}$ms${ss}${fs}?${ampm}?|" # H12:MN:SS[,S+] [AM]
- if ($ampm);
- $timerx .= "${h24}$hm${mn}$ms${ss}${fs}?|" . # H24:MN:SS[,S+]
- "(?<h>24)$hm(?<mn>00)$ms(?<s>00)|"; # 24:00:00
+ push(@timerx,
+ "${h12}$hm${mn}$ms${ss}${fs}?${ampm}?", # H12:MN:SS[,S+] [AM]
+ ) if ($ampm);
+
+ push(@timerx,
+ "${h24}$hm${mn}$ms${ss}${fs}?", # H24:MN:SS[,S+]
+ "(?<h>24)$hm(?<mn>00)$ms(?<s>00)", # 24:00:00
+ );
}
for (my $i=0; $i<=$#hm; $i++) {
my $hm = $hm[$i];
my $ms = $ms[$i];
- $timerx .= "${h12}$hm${mn}${fm}${ampm}?|" # H12:MN,M+ [AM]
- if ($ampm);
- $timerx .= "${h24}$hm${mn}${fm}|"; # H24:MN,M+
+ push(@timerx,
+ "${h12}$hm${mn}${fm}${ampm}?", # H12:MN,M+ [AM]
+ ) if ($ampm);
+ push(@timerx,
+ "${h24}$hm${mn}${fm}", # H24:MN,M+
+ );
}
for (my $i=0; $i<=$#hm; $i++) {
my $hm = $hm[$i];
my $ms = $ms[$i];
- $timerx .= "${h12}$hm${mn}${ampm}?|" # H12:MN [AM]
- if ($ampm);
- $timerx .= "${h24}$hm${mn}|" . # H24:MN
- "(?<h>24)$hm(?<mn>00)|"; # 24:00
+ push(@timerx,
+ "${h12}$hm${mn}${ampm}?", # H12:MN [AM]
+ ) if ($ampm);
+ push(@timerx,
+ "${h24}$hm${mn}", # H24:MN
+ "(?<h>24)$hm(?<mn>00)", # 24:00
+ );
}
- $timerx .= "${h12}${fh}${ampm}|" # H12,H+ AM
- if ($ampm);
-
- $timerx .= "${h12}${ampm}|" if ($ampm); # H12 AM
-
- $timerx .= "${h24}${fh}|"; # H24,H+
-
- chop($timerx); # remove trailing pipe
+ push(@timerx,
+ "${h12}${fh}${ampm}", # H12,H+ AM
+ "${h12}${ampm}", # H12 AM
+ ) if ($ampm);
+ push(@timerx,
+ "${h24}${fh}", # H24,H+
+ );
+ my $timerx = join('|',@timerx);
my $zrx = $dmt->_zrx('zrx');
my $at = $$dmb{'data'}{'rx'}{'at'};
my $atrx = qr/(?:^|\s+)(?:$at)\s+/;
@@ -1434,10 +1469,13 @@ sub _other_rx {
my $d = '(?<d>\d\d?)';
my $sep = '(?<sep>[\s\.\/\-])';
- my $daterx =
- "${m}${sep}${d}\\k<sep>$y4|" . # M/D/YYYY
- "${m}${sep}${d}\\k<sep>$y2|" . # M/D/YY
- "${m}${sep}${d}"; # M/D
+ my @daterx =
+ (
+ "${m}${sep}${d}\\k<sep>$y4", # M/D/YYYY
+ "${m}${sep}${d}\\k<sep>$y2", # M/D/YY
+ "${m}${sep}${d}", # M/D
+ );
+ my $daterx = join('|',@daterx);
$daterx = qr/^\s*(?:$daterx)\s*$/;
$$dmb{'data'}{'rx'}{'other'}{$rx} = $daterx;
@@ -1455,40 +1493,76 @@ sub _other_rx {
my $mmm = "(?:(?<mmm>$abb)|(?<month>$nam))";
my $sep = '(?<sep>[\s\.\/\-])';
- my $daterx =
- "${y4}${sep}${m}\\k<sep>$d|" . # YYYY/M/D
-
- "${mmm}\\s*${dd}\\s*${y4}|" . # mmmDDYYYY
- "${mmm}\\s*${dd}\\s*${y2}|" . # mmmDDYY
- "${mmm}\\s*${d}|" . # mmmD
- "${d}\\s*${mmm}\\s*${y4}|" . # DmmmYYYY
- "${d}\\s*${mmm}\\s*${y2}|" . # DmmmYY
- "${d}\\s*${mmm}|" . # Dmmm
- "${y4}\\s*${mmm}\\s*${d}|" . # YYYYmmmD
-
- "${mmm}${sep}${d}\\k<sep>${y4}|" . # mmm/D/YYYY
- "${mmm}${sep}${d}\\k<sep>${y2}|" . # mmm/D/YY
- "${mmm}${sep}${d}|" . # mmm/D
- "${d}${sep}${mmm}\\k<sep>${y4}|" . # D/mmm/YYYY
- "${d}${sep}${mmm}\\k<sep>${y2}|" . # D/mmm/YY
- "${d}${sep}${mmm}|" . # D/mmm
- "${y4}${sep}${mmm}\\k<sep>${d}|" . # YYYY/mmm/D
-
- "${mmm}${sep}?${d}\\s+${y2}|" . # mmmD YY mmm/D YY
- "${mmm}${sep}?${d}\\s+${y4}|" . # mmmD YYYY mmm/D YYYY
- "${d}${sep}?${mmm}\\s+${y2}|" . # Dmmm YY D/mmm YY
- "${d}${sep}?${mmm}\\s+${y4}|" . # Dmmm YYYY D/mmm YYYY
-
- "${y2}\\s+${mmm}${sep}?${d}|" . # YY mmmD YY mmm/D
- "${y4}\\s+${mmm}${sep}?${d}|" . # YYYY mmmD YYYY mmm/D
- "${y2}\\s+${d}${sep}?${mmm}|" . # YY Dmmm YY D/mmm
- "${y4}\\s+${d}${sep}?${mmm}|" . # YYYY Dmmm YYYY D/mmm
-
- "${y4}:${m}:${d}"; # YYYY:MM:DD
+ my $format_mmmyyyy = $dmb->_config('format_mmmyyyy');
+
+ my @daterx = ();
+ push(@daterx,
+ "${y4}${sep}${m}\\k<sep>$d", # YYYY/M/D
+ "${mmm}\\s*${dd}\\s*${y4}", # mmmDDYYYY
+ );
+ push(@daterx,
+ "${mmm}\\s*${dd}\\s*${y2}", # mmmDDYY
+ ) if (! $format_mmmyyyy);
+ push(@daterx,
+ "${mmm}\\s*${d}", # mmmD
+ "${d}\\s*${mmm}\\s*${y4}", # DmmmYYYY
+ "${d}\\s*${mmm}\\s*${y2}", # DmmmYY
+ "${d}\\s*${mmm}", # Dmmm
+ "${y4}\\s*${mmm}\\s*${d}", # YYYYmmmD
+
+ "${mmm}${sep}${d}\\k<sep>${y4}", # mmm/D/YYYY
+ "${mmm}${sep}${d}\\k<sep>${y2}", # mmm/D/YY
+ "${mmm}${sep}${d}", # mmm/D
+ "${d}${sep}${mmm}\\k<sep>${y4}", # D/mmm/YYYY
+ "${d}${sep}${mmm}\\k<sep>${y2}", # D/mmm/YY
+ "${d}${sep}${mmm}", # D/mmm
+ "${y4}${sep}${mmm}\\k<sep>${d}", # YYYY/mmm/D
+
+ "${mmm}${sep}?${d}\\s+${y2}", # mmmD YY mmm/D YY
+ "${mmm}${sep}?${d}\\s+${y4}", # mmmD YYYY mmm/D YYYY
+ "${d}${sep}?${mmm}\\s+${y2}", # Dmmm YY D/mmm YY
+ "${d}${sep}?${mmm}\\s+${y4}", # Dmmm YYYY D/mmm YYYY
+
+ "${y2}\\s+${mmm}${sep}?${d}", # YY mmmD YY mmm/D
+ "${y4}\\s+${mmm}${sep}?${d}", # YYYY mmmD YYYY mmm/D
+ "${y2}\\s+${d}${sep}?${mmm}", # YY Dmmm YY D/mmm
+ "${y4}\\s+${d}${sep}?${mmm}", # YYYY Dmmm YYYY D/mmm
+
+ "${y4}:${m}:${d}", # YYYY:MM:DD
+ );
+ my $daterx = join('|',@daterx);
$daterx = qr/^\s*(?:$daterx)\s*$/i;
$$dmb{'data'}{'rx'}{'other'}{$rx} = $daterx;
+ } elsif ($rx eq 'truncated') {
+
+ my $abb = $$dmb{'data'}{'rx'}{'month_abb'}[0];
+ my $nam = $$dmb{'data'}{'rx'}{'month_name'}[0];
+
+ my $y4 = '(?<y>\d\d\d\d)';
+ my $mmm = "(?:(?<mmm>$abb)|(?<month>$nam))";
+ my $sep = '(?<sep>[\s\.\/\-])';
+
+ my $format_mmmyyyy = $dmb->_config('format_mmmyyyy');
+
+ my @daterx = ();
+ push(@daterx,
+ "${mmm}\\s*${y4}", # mmmYYYY
+ "${y4}\\s*${mmm}", # YYYYmmm
+
+ "${y4}${sep}${mmm}", # YYYY/mmm
+ "${mmm}${sep}${y4}", # mmm/YYYY
+ ) if ($format_mmmyyyy);
+
+ if (@daterx) {
+ my $daterx = join('|',@daterx);
+ $daterx = qr/^\s*(?:$daterx)\s*$/i;
+ $$dmb{'data'}{'rx'}{'other'}{$rx} = $daterx;
+ } else {
+ $$dmb{'data'}{'rx'}{'other'}{$rx} = '';
+ }
+
} elsif ($rx eq 'dow') {
my $day_abb = $$dmb{'data'}{'rx'}{'day_abb'}[0];
@@ -1523,15 +1597,18 @@ sub _other_rx {
my $offrx = $dmt->_zrx('offrx');
my $zrx = $dmt->_zrx('zrx');
- my $daterx =
- "${special}|" . # now
- "${special}\\s+${zrx}|" . # now EDT
+ my @daterx =
+ (
+ "${special}", # now
+ "${special}\\s+${zrx}", # now EDT
- "epoch\\s+$secs|" . # epoch SECS
- "epoch\\s+$secs\\s+${zrx}|" . # epoch SECS EDT
+ "epoch\\s+$secs", # epoch SECS
+ "epoch\\s+$secs\\s+${zrx}", # epoch SECS EDT
- "${dd}\\/${mmm}\\/${y4}:${h24}:${mn}:${ss}\\s*${offrx}";
+ "${dd}\\/${mmm}\\/${y4}:${h24}:${mn}:${ss}\\s*${offrx}",
# Common log format: 10/Oct/2000:13:55:36 -0700
+ );
+ my $daterx = join('|',@daterx);
$daterx = qr/^\s*(?:$daterx)\s*$/i;
$$dmb{'data'}{'rx'}{'other'}{$rx} = $daterx;
@@ -1563,38 +1640,40 @@ sub _other_rx {
$nth_wom = "(?<nth>$nth_wom)";
$special = "(?<special>$special)";
- my $daterx =
- "${mmm}\\s+${nth}\\s*$y?|" . # Dec 1st [1970]
- "${nth}\\s+${mmm}\\s*$y?|" . # 1st Dec [1970]
- "$y\\s+${mmm}\\s+${nth}|" . # 1970 Dec 1st
- "$y\\s+${nth}\\s+${mmm}|" . # 1970 1st Dec
+ my @daterx =
+ (
+ "${mmm}\\s+${nth}\\s*$y?", # Dec 1st [1970]
+ "${nth}\\s+${mmm}\\s*$y?", # 1st Dec [1970]
+ "$y\\s+${mmm}\\s+${nth}", # 1970 Dec 1st
+ "$y\\s+${nth}\\s+${mmm}", # 1970 1st Dec
- "${next}\\s+${fld}|" . # next year, next month, next week
- "${next}|" . # next friday
+ "${next}\\s+${fld}", # next year, next month, next week
+ "${next}", # next friday
- "${last}\\s+${mmm}\\s*$y?|" . # last friday in october 95
- "${last}\\s+${df}\\s+${mmm}\\s*$y?|" .
- # last day in october 95
- "${last}\\s*$y?|" . # last friday in 95
+ "${last}\\s+${mmm}\\s*$y?", # last friday in october 95
+ "${last}\\s+${df}\\s+${mmm}\\s*$y?",
+ # last day in october 95
+ "${last}\\s*$y?", # last friday in 95
- "${nth_wom}\\s+${mmm}\\s*$y?|" .
- # nth DoW in MMM [YYYY]
- "${nth}\\s*$y?|" . # nth DoW in [YYYY]
+ "${nth_wom}\\s+${mmm}\\s*$y?", # nth DoW in MMM [YYYY]
+ "${nth}\\s*$y?", # nth DoW in [YYYY]
- "${nth}\\s+$df\\s+${mmm}\\s*$y?|" .
- # nth day in MMM [YYYY]
+ "${nth}\\s+$df\\s+${mmm}\\s*$y?",
+ # nth day in MMM [YYYY]
- "${nth}\\s+${wf}\\s*$y?|" . # DoW Nth week [YYYY]
- "${wf}\\s+(?<n>\\d+)\\s*$y?|" . # DoW week N [YYYY]
+ "${nth}\\s+${wf}\\s*$y?", # DoW Nth week [YYYY]
+ "${wf}\\s+(?<n>\\d+)\\s*$y?", # DoW week N [YYYY]
- "${special}|" . # today, tomorrow
- "${special}\\s+${wf}|" . # today week
- # British: same as 1 week from today
+ "${special}", # today, tomorrow
+ "${special}\\s+${wf}", # today week
+ # British: same as 1 week from today
- "${nth}|" . # nth
+ "${nth}", # nth
- "${wf}"; # monday week
- # British: same as 'in 1 week on monday'
+ "${wf}", # monday week
+ # British: same as 'in 1 week on monday'
+ );
+ my $daterx = join('|',@daterx);
$daterx = qr/^\s*(?:$daterx)\s*$/i;
$$dmb{'data'}{'rx'}{'other'}{$rx} = $daterx;
@@ -1740,6 +1819,57 @@ sub _parse_date_common {
return ();
}
+# Parse truncated dates
+sub _parse_date_truncated {
+ my($self,$string,$noupdate) = @_;
+ my $dmt = $$self{'tz'};
+ my $dmb = $$dmt{'base'};
+
+ my $daterx = (exists $$dmb{'data'}{'rx'}{'other'}{'truncated'} ?
+ $$dmb{'data'}{'rx'}{'other'}{'truncated'} :
+ $self->_other_rx('truncated'));
+
+ return () if (! $daterx);
+
+ # Since we want whitespace to be used as a separator, turn all
+ # whitespace into single spaces. This is necessary since the
+ # regexps do backreferences to make sure that separators are
+ # not mixed.
+ $string =~ s/\s+/ /g;
+
+ if ($string =~ $daterx) {
+ my($y,$mmm,$month) = @+{qw(y mmm month)};
+
+ my ($m,$d);
+ if ($mmm) {
+ $m = $$dmb{'data'}{'wordmatch'}{'month_abb'}{lc($mmm)};
+ } elsif ($month) {
+ $m = $$dmb{'data'}{'wordmatch'}{'month_name'}{lc($month)};
+ }
+
+ # Handle all of the mmmYYYY formats
+
+ if ($y && $m) {
+
+ my $format_mmmyyyy = $dmb->_config('format_mmmyyyy');
+ if ($format_mmmyyyy eq 'first') {
+ $d=1;
+ $$self{'data'}{'default_time'} = [0,0,0];
+ } else {
+ $d=$dmb->days_in_month($y,$m);
+ $$self{'data'}{'default_time'} = [23,59,59];
+ }
+
+ $$self{'data'}{'def'}[0] = '';
+ $$self{'data'}{'def'}[1] = '';
+ $$self{'data'}{'def'}[2] = 1;
+ return($y,$m,$d);
+ }
+ }
+
+ return ();
+}
+
sub _parse_tz {
my($self,$string,$noupdate) = @_;
my $dmt = $$self{'tz'};
@@ -2598,8 +2728,10 @@ BEGIN {
} else {
$err = 1;
}
- for (my $i=0; $i<=5; $i++) {
- $def[$i] = 0 if ($def[$i]);
+ if ($$self{'data'}{'set'} != 2) {
+ for (my $i=0; $i<=5; $i++) {
+ $def[$i] = 0 if ($def[$i]);
+ }
}
$tz = $dmt->_now('tz',1) if (! $new_tz);