|
Packit |
95306a |
package Date::Manip::DM6;
|
|
Packit |
95306a |
# Copyright (c) 1995-2017 Sullivan Beck. All rights reserved.
|
|
Packit |
95306a |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit |
95306a |
# under the same terms as Perl itself.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
###########################################################################
|
|
Packit |
95306a |
###########################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
our (@ISA,@EXPORT);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
require 5.010000;
|
|
Packit |
95306a |
require Exporter;
|
|
Packit |
95306a |
@ISA = qw(Exporter);
|
|
Packit |
95306a |
@EXPORT = qw(
|
|
Packit |
95306a |
DateManipVersion
|
|
Packit |
95306a |
Date_Init
|
|
Packit |
95306a |
ParseDate
|
|
Packit |
95306a |
ParseDateString
|
|
Packit |
95306a |
ParseDateDelta
|
|
Packit |
95306a |
ParseDateFormat
|
|
Packit |
95306a |
ParseRecur
|
|
Packit |
95306a |
Date_IsHoliday
|
|
Packit |
95306a |
Date_IsWorkDay
|
|
Packit |
95306a |
Date_Cmp
|
|
Packit |
95306a |
DateCalc
|
|
Packit |
95306a |
UnixDate
|
|
Packit |
95306a |
Delta_Format
|
|
Packit |
95306a |
Date_GetPrev
|
|
Packit |
95306a |
Date_GetNext
|
|
Packit |
95306a |
Date_SetTime
|
|
Packit |
95306a |
Date_SetDateField
|
|
Packit |
95306a |
Events_List
|
|
Packit |
95306a |
Date_NextWorkDay
|
|
Packit |
95306a |
Date_PrevWorkDay
|
|
Packit |
95306a |
Date_NearestWorkDay
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Date_DayOfWeek
|
|
Packit |
95306a |
Date_SecsSince1970
|
|
Packit |
95306a |
Date_SecsSince1970GMT
|
|
Packit |
95306a |
Date_DaysSince1BC
|
|
Packit |
95306a |
Date_DayOfYear
|
|
Packit |
95306a |
Date_NthDayOfYear
|
|
Packit |
95306a |
Date_DaysInMonth
|
|
Packit |
95306a |
Date_DaysInYear
|
|
Packit |
95306a |
Date_WeekOfYear
|
|
Packit |
95306a |
Date_LeapYear
|
|
Packit |
95306a |
Date_DaySuffix
|
|
Packit |
95306a |
Date_ConvTZ
|
|
Packit |
95306a |
Date_TimeZone
|
|
Packit |
95306a |
);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
use strict;
|
|
Packit |
95306a |
use integer;
|
|
Packit |
95306a |
use warnings;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
our $VERSION;
|
|
Packit |
95306a |
$VERSION='6.60';
|
|
Packit |
95306a |
|
|
Packit |
95306a |
###########################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
our ($dmb,$dmt,$date,$delta,$recur,$date2,$dateUT);
|
|
Packit |
95306a |
use Date::Manip::Date;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$dateUT = new Date::Manip::Date;
|
|
Packit |
95306a |
$dateUT->config('setdate','now,Etc/GMT');
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$date = new Date::Manip::Date;
|
|
Packit |
95306a |
$date2 = $date->new_date();
|
|
Packit |
95306a |
$delta = $date->new_delta();
|
|
Packit |
95306a |
$recur = $date->new_recur();
|
|
Packit |
95306a |
$dmb = $date->base();
|
|
Packit |
95306a |
$dmt = $date->tz();
|
|
Packit |
95306a |
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
# THESE ARE THE MAIN ROUTINES
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub DateManipVersion {
|
|
Packit |
95306a |
my($flag) = @_;
|
|
Packit |
95306a |
return $date->version($flag);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_Init {
|
|
Packit |
95306a |
my(@args) = @_;
|
|
Packit |
95306a |
my(@args2);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
foreach my $arg (@args) {
|
|
Packit |
95306a |
if ($arg =~ /^(\S+)\s*=\s*(.*)$/) {
|
|
Packit |
95306a |
push(@args2,$1,$2);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
warn "ERROR: invalid Date_Init argument: $arg\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$date->config(@args2);
|
|
Packit |
95306a |
return $date->err();
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub ParseDateString {
|
|
Packit |
95306a |
my($string,@opts) = @_;
|
|
Packit |
95306a |
$string = '' if (! defined($string));
|
|
Packit |
95306a |
my $err = $date->parse($string,@opts);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
my $ret = $date->value('local');
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub ParseDateFormat {
|
|
Packit |
95306a |
my($format,$string) = @_;
|
|
Packit |
95306a |
$string = '' if (! defined($string));
|
|
Packit |
95306a |
my $err = $date->parse_format($format,$string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
my $ret = $date->value('local');
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub ParseDate {
|
|
Packit |
95306a |
my($arg,@opts) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$arg = '' if (! defined($arg));
|
|
Packit |
95306a |
my $ref = ref($arg);
|
|
Packit |
95306a |
my $list = 0;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @args;
|
|
Packit |
95306a |
if (! $ref) {
|
|
Packit |
95306a |
@args = ($arg);
|
|
Packit |
95306a |
} elsif ($ref eq 'ARRAY') {
|
|
Packit |
95306a |
@args = @$arg;
|
|
Packit |
95306a |
$list = 1;
|
|
Packit |
95306a |
} elsif ($ref eq 'SCALAR') {
|
|
Packit |
95306a |
@args = ($$arg);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
print "ERROR: Invalid arguments to ParseDate.\n";
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
while (@args) {
|
|
Packit |
95306a |
my $string = join(' ',@args);
|
|
Packit |
95306a |
my $err = $date->parse($string,@opts);
|
|
Packit |
95306a |
if (! $err) {
|
|
Packit |
95306a |
splice(@$arg,0,$#args+1) if ($list);
|
|
Packit |
95306a |
my $ret = $date->value('local');
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
pop(@args);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub ParseDateDelta {
|
|
Packit |
95306a |
my(@a) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@a < 1 || @a > 2) {
|
|
Packit |
95306a |
print "ERROR: Invalid number of arguments to ParseDateDelta.\n";
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
my($args,$mode) = @_;
|
|
Packit |
95306a |
$args = '' if (! defined($args));
|
|
Packit |
95306a |
$mode = '' if (! $mode);
|
|
Packit |
95306a |
$mode = lc($mode);
|
|
Packit |
95306a |
if ($mode && ($mode ne 'exact' && $mode ne 'semi' && $mode ne 'approx')) {
|
|
Packit |
95306a |
print "ERROR: Invalid arguments to ParseDateDelta.\n";
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @args;
|
|
Packit |
95306a |
my $ref = ref($args);
|
|
Packit |
95306a |
my $list = 0;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! $ref) {
|
|
Packit |
95306a |
@args = ($args);
|
|
Packit |
95306a |
} elsif ($ref eq 'ARRAY') {
|
|
Packit |
95306a |
@args = @$args;
|
|
Packit |
95306a |
$list = 1;
|
|
Packit |
95306a |
} elsif ($ref eq 'SCALAR') {
|
|
Packit |
95306a |
@args = ($$args);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
print "ERROR: Invalid arguments to ParseDateDelta.\n";
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
while (@args) {
|
|
Packit |
95306a |
my $string = join(' ',@args);
|
|
Packit |
95306a |
my $err = $delta->parse($string);
|
|
Packit |
95306a |
if (! $err) {
|
|
Packit |
95306a |
$delta->convert($mode) if ($mode);
|
|
Packit |
95306a |
splice(@$args,0,$#args+1) if ($list);
|
|
Packit |
95306a |
my $ret = $delta->value('local');
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
pop(@args);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub UnixDate {
|
|
Packit |
95306a |
my($string,@in) = @_;
|
|
Packit |
95306a |
my(@ret);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return () if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
foreach my $in (@in) {
|
|
Packit |
95306a |
push(@ret,$date->printf($in));
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! wantarray) {
|
|
Packit |
95306a |
return join(" ",@ret);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Delta_Format {
|
|
Packit |
95306a |
my($string,@args) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $delta->parse($string);
|
|
Packit |
95306a |
return () if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my($mode,$dec,@in);
|
|
Packit |
95306a |
if (! defined($args[0])) {
|
|
Packit |
95306a |
$mode = 'exact';
|
|
Packit |
95306a |
@in = @args;
|
|
Packit |
95306a |
shift(@in);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif (lc($args[0]) eq 'exact' ||
|
|
Packit |
95306a |
lc($args[0]) eq 'approx' ||
|
|
Packit |
95306a |
lc($args[0]) eq 'semi') {
|
|
Packit |
95306a |
($mode,$dec,@in) = (@args);
|
|
Packit |
95306a |
$mode = lc($mode);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($args[0] =~ /^\d+$/) {
|
|
Packit |
95306a |
($mode,$dec,@in) = ('exact',@args);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$mode = 'exact';
|
|
Packit |
95306a |
@in = @args;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$dec = 0 if (! $dec);
|
|
Packit |
95306a |
@in = _Delta_Format_old($mode,$dec,@in);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @ret = ();
|
|
Packit |
95306a |
foreach my $in (@in) {
|
|
Packit |
95306a |
push(@ret,$delta->printf($in));
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! wantarray) {
|
|
Packit |
95306a |
return join(" ",@ret);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub _Delta_Format_old {
|
|
Packit |
95306a |
my($mode,$dec,@in) = @_;
|
|
Packit |
95306a |
my(@ret);
|
|
Packit |
95306a |
my $business = $delta->type('business');
|
|
Packit |
95306a |
|
|
Packit |
95306a |
foreach my $in (@in) {
|
|
Packit |
95306a |
my $out = '';
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# This will look for old formats (%Xd, %Xh, %Xt) and turn them
|
|
Packit |
95306a |
# into the new format: %XYZ
|
|
Packit |
95306a |
|
|
Packit |
95306a |
while ($in) {
|
|
Packit |
95306a |
if ($in =~ s/^([^%]+)//) {
|
|
Packit |
95306a |
$out .= $1;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($in =~ /^%[yMwdhms][yMwdhms][yMwdhms]/) {
|
|
Packit |
95306a |
# It's one of the new formats so don't modify it.
|
|
Packit |
95306a |
$in =~ s/^%//;
|
|
Packit |
95306a |
$out .= '%';
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($in =~ s/^%([yMwdhms])([dht])//) {
|
|
Packit |
95306a |
my($field,$scope) = ($1,$2);
|
|
Packit |
95306a |
$out .= '%';
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($scope eq 'd') {
|
|
Packit |
95306a |
if ($mode eq 'approx') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}${field}s";
|
|
Packit |
95306a |
} elsif ($field eq 'y' || $field eq 'M') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}${field}M";
|
|
Packit |
95306a |
} elsif ($mode eq 'semi') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}${field}s";
|
|
Packit |
95306a |
} elsif ($field eq 'w' && $business) {
|
|
Packit |
95306a |
$out .= ".${dec}www";
|
|
Packit |
95306a |
} elsif (($field eq 'w' || $field eq 'd') && ! $business) {
|
|
Packit |
95306a |
$out .= ".${dec}${field}${field}d";
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$out .= ".${dec}${field}${field}s";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($scope eq 'h') {
|
|
Packit |
95306a |
if ($mode eq 'approx') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}y${field}";
|
|
Packit |
95306a |
} elsif ($field eq 'y' || $field eq 'M') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}y${field}";
|
|
Packit |
95306a |
} elsif ($mode eq 'semi') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}w${field}";
|
|
Packit |
95306a |
} elsif ($field eq 'w') {
|
|
Packit |
95306a |
$out .= ".${dec}www";
|
|
Packit |
95306a |
} elsif ($field eq 'd' && ! $business) {
|
|
Packit |
95306a |
$out .= ".${dec}dwd";
|
|
Packit |
95306a |
} elsif ($business) {
|
|
Packit |
95306a |
$out .= ".${dec}${field}d${field}";
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$out .= ".${dec}${field}h${field}";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($scope eq 't') {
|
|
Packit |
95306a |
if ($mode eq 'approx') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}ys";
|
|
Packit |
95306a |
} elsif ($field eq 'y' || $field eq 'M') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}yM";
|
|
Packit |
95306a |
} elsif ($mode eq 'semi') {
|
|
Packit |
95306a |
$out .= ".${dec}${field}ws";
|
|
Packit |
95306a |
} elsif ($field eq 'w' && $business) {
|
|
Packit |
95306a |
$out .= ".${dec}www";
|
|
Packit |
95306a |
} elsif (($field eq 'w' || $field eq 'd') && ! $business) {
|
|
Packit |
95306a |
$out .= ".${dec}${field}wd";
|
|
Packit |
95306a |
} elsif ($business) {
|
|
Packit |
95306a |
$out .= ".${dec}${field}ds";
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$out .= ".${dec}${field}hs";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
# It's one of the new formats so don't modify it.
|
|
Packit |
95306a |
$in =~ s/^%//;
|
|
Packit |
95306a |
$out .= '%';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
push(@ret,$out);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub DateCalc {
|
|
Packit |
95306a |
my($d1,$d2,@args) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Handle \$err arg
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my($ref,$errref);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@args && ref($args[0])) {
|
|
Packit |
95306a |
$errref = shift(@args);
|
|
Packit |
95306a |
$ref = 1;
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$ref = 0;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Parse $d1 and $d2
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my ($obj1,$obj2,$err,$usemode);
|
|
Packit |
95306a |
$usemode = 1;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$obj1 = $date->new_date();
|
|
Packit |
95306a |
$err = $obj1->parse($d1,'nodelta');
|
|
Packit |
95306a |
if ($err) {
|
|
Packit |
95306a |
$obj1 = $date->new_delta();
|
|
Packit |
95306a |
$err = $obj1->parse($d1);
|
|
Packit |
95306a |
if ($err) {
|
|
Packit |
95306a |
$$errref = 1 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$usemode = 0;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$obj2 = $date->new_date();
|
|
Packit |
95306a |
$err = $obj2->parse($d2,'nodelta');
|
|
Packit |
95306a |
if ($err) {
|
|
Packit |
95306a |
$obj2 = $date->new_delta();
|
|
Packit |
95306a |
$err = $obj2->parse($d2);
|
|
Packit |
95306a |
if ($err) {
|
|
Packit |
95306a |
$$errref = 2 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$usemode = 0;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Handle $mode
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my($mode);
|
|
Packit |
95306a |
if (@args) {
|
|
Packit |
95306a |
$mode = shift(@args);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
if (@args) {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Apply the $mode to any deltas
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (defined($mode)) {
|
|
Packit |
95306a |
if (ref($obj1) eq 'Date::Manip::Delta') {
|
|
Packit |
95306a |
if ($$obj1{'data'}{'gotmode'}) {
|
|
Packit |
95306a |
if ($mode == 2 || $mode == 3) {
|
|
Packit |
95306a |
if (! $obj1->type('business')) {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
if ($obj1->type('business')) {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
if ($mode == 2 || $mode == 3) {
|
|
Packit |
95306a |
$obj1->set('mode','business');
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$obj1->set('mode','normal');
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (ref($obj2) eq 'Date::Manip::Delta') {
|
|
Packit |
95306a |
if ($$obj2{'data'}{'gotmode'}) {
|
|
Packit |
95306a |
if ($mode == 2 || $mode == 3) {
|
|
Packit |
95306a |
if (! $obj2->type('business')) {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
if ($obj2->type('business')) {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
if ($mode ==2 || $mode == 3) {
|
|
Packit |
95306a |
$obj2->set('mode','business');
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$obj2->set('mode','normal');
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Do the calculation
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $obj3;
|
|
Packit |
95306a |
if ($usemode) {
|
|
Packit |
95306a |
$mode = 'exact' if (! $mode);
|
|
Packit |
95306a |
my %tmp = ('0' => 'exact',
|
|
Packit |
95306a |
'1' => 'approx',
|
|
Packit |
95306a |
'2' => 'bapprox',
|
|
Packit |
95306a |
'3' => 'business',
|
|
Packit |
95306a |
'exact' => 'exact',
|
|
Packit |
95306a |
'semi' => 'semi',
|
|
Packit |
95306a |
'approx' => 'approx',
|
|
Packit |
95306a |
'business'=> 'business',
|
|
Packit |
95306a |
'bsemi' => 'bsemi',
|
|
Packit |
95306a |
'bapprox' => 'bapprox',
|
|
Packit |
95306a |
);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (exists $tmp{$mode}) {
|
|
Packit |
95306a |
$mode = $tmp{$mode};
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$$errref = 3 if ($ref);
|
|
Packit |
95306a |
return '';
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$obj3 = $obj1->calc($obj2,$mode);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$obj3 = $obj1->calc($obj2);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $ret = $obj3->value();
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_GetPrev {
|
|
Packit |
95306a |
my($string,$dow,$curr,@time) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (defined($dow)) {
|
|
Packit |
95306a |
$dow = lc($dow);
|
|
Packit |
95306a |
if (exists $$dmb{'data'}{'wordmatch'}{'day_char'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_char'}{$dow};
|
|
Packit |
95306a |
} elsif (exists $$dmb{'data'}{'wordmatch'}{'day_abb'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_abb'}{$dow};
|
|
Packit |
95306a |
} elsif (exists $$dmb{'data'}{'wordmatch'}{'day_name'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_name'}{$dow};
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($#time == 0) {
|
|
Packit |
95306a |
@time = @{ $dmb->split('hms',$time[0]) };
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@time) {
|
|
Packit |
95306a |
while ($#time < 2) {
|
|
Packit |
95306a |
push(@time,0);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$date->prev($dow,$curr,\@time);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$date->prev($dow,$curr);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
my $ret = $date->value();
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_GetNext {
|
|
Packit |
95306a |
my($string,$dow,$curr,@time) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (defined($dow)) {
|
|
Packit |
95306a |
$dow = lc($dow);
|
|
Packit |
95306a |
if (exists $$dmb{'data'}{'wordmatch'}{'day_char'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_char'}{$dow};
|
|
Packit |
95306a |
} elsif (exists $$dmb{'data'}{'wordmatch'}{'day_abb'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_abb'}{$dow};
|
|
Packit |
95306a |
} elsif (exists $$dmb{'data'}{'wordmatch'}{'day_name'}{$dow}) {
|
|
Packit |
95306a |
$dow = $$dmb{'data'}{'wordmatch'}{'day_name'}{$dow};
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($#time == 0) {
|
|
Packit |
95306a |
@time = @{ $dmb->split('hms',$time[0]) };
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@time) {
|
|
Packit |
95306a |
while ($#time < 2) {
|
|
Packit |
95306a |
push(@time,0);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$date->next($dow,$curr,\@time);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$date->next($dow,$curr);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
my $ret = $date->value();
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_SetTime {
|
|
Packit |
95306a |
my($string,@time) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($#time == 0) {
|
|
Packit |
95306a |
@time = @{ $dmb->split('hms',$time[0]) };
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
while ($#time < 2) {
|
|
Packit |
95306a |
push(@time,0);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$date->set('time',\@time);
|
|
Packit |
95306a |
my $val = $date->value();
|
|
Packit |
95306a |
return $val;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_SetDateField {
|
|
Packit |
95306a |
my($string,$field,$val) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$date->set($field,$val);
|
|
Packit |
95306a |
my $ret = $date->value();
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_NextWorkDay {
|
|
Packit |
95306a |
my($string,$n,$checktime) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
$date->next_business_day($n,$checktime);
|
|
Packit |
95306a |
my $val = $date->value();
|
|
Packit |
95306a |
return $val;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_PrevWorkDay {
|
|
Packit |
95306a |
my($string,$n,$checktime) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
$date->prev_business_day($n,$checktime);
|
|
Packit |
95306a |
my $val = $date->value();
|
|
Packit |
95306a |
return $val;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_NearestWorkDay {
|
|
Packit |
95306a |
my($string,$tomorrowfirst) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($string);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
$date->nearest_business_day($tomorrowfirst);
|
|
Packit |
95306a |
my $val = $date->value();
|
|
Packit |
95306a |
return $val;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub ParseRecur {
|
|
Packit |
95306a |
my($string,@args) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($#args == 3) {
|
|
Packit |
95306a |
my($base,$d0,$d1,$flags) = @args;
|
|
Packit |
95306a |
@args = ();
|
|
Packit |
95306a |
push(@args,$flags) if ($flags);
|
|
Packit |
95306a |
push(@args,$base,$d0,$d1);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $recur->parse($string,@args);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (wantarray) {
|
|
Packit |
95306a |
my @dates = $recur->dates();
|
|
Packit |
95306a |
my @ret;
|
|
Packit |
95306a |
foreach my $d (@dates) {
|
|
Packit |
95306a |
my $val = $d->value();
|
|
Packit |
95306a |
push(@ret,$val);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @int = @{ $$recur{'data'}{'interval'} };
|
|
Packit |
95306a |
my @rtime = @{ $$recur{'data'}{'rtime'} };
|
|
Packit |
95306a |
my @flags = @{ $$recur{'data'}{'flags'} };
|
|
Packit |
95306a |
my $start = $$recur{'data'}{'start'};
|
|
Packit |
95306a |
my $end = $$recur{'data'}{'end'};
|
|
Packit |
95306a |
my $base = $$recur{'data'}{'base'};
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $r;
|
|
Packit |
95306a |
if (@int) {
|
|
Packit |
95306a |
$r = join(':',@int);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
if (@rtime) {
|
|
Packit |
95306a |
my @rt;
|
|
Packit |
95306a |
foreach my $rt (@rtime) {
|
|
Packit |
95306a |
push(@rt,join(",",@$rt));
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$r .= '*' . join(':',@rt);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$r .= '*' . join(",",@flags);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $val = (defined($base) ? $base->value() : '');
|
|
Packit |
95306a |
$r .= "*$val";
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$val = (defined($start) ? $start->value() : '');
|
|
Packit |
95306a |
$r .= "*$val";
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$val = (defined($end) ? $end->value() : '');
|
|
Packit |
95306a |
$r .= "*$val";
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return $r;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Events_List {
|
|
Packit |
95306a |
my($datestr,@args) = @_;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# First argument is always a date
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $date->parse($datestr);
|
|
Packit |
95306a |
return [] if ($err);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Second argument is absent, a date, or 0.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @list;
|
|
Packit |
95306a |
my $flag = 0;
|
|
Packit |
95306a |
my ($date0,$date1);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! @args) {
|
|
Packit |
95306a |
# absent
|
|
Packit |
95306a |
@list = $date->list_events('dates');
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
# a date or 0
|
|
Packit |
95306a |
my $arg = shift(@args);
|
|
Packit |
95306a |
$flag = shift(@args) if (@args);
|
|
Packit |
95306a |
if (@args) {
|
|
Packit |
95306a |
warn "ERROR: unknown argument list\n";
|
|
Packit |
95306a |
return [];
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! $arg) {
|
|
Packit |
95306a |
my($y,$m,$d) = $date->value();
|
|
Packit |
95306a |
$date2->set('date',[$y,$m,$d,23,59,59]);
|
|
Packit |
95306a |
@list = $date->list_events(0, 'dates');
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$err = $date2->parse($arg);
|
|
Packit |
95306a |
if ($err) {
|
|
Packit |
95306a |
warn "ERROR: invalid argument: $arg\n";
|
|
Packit |
95306a |
return [];
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
@list = $date->list_events($date2, 'dates');
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Handle the flag
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (! $flag) {
|
|
Packit |
95306a |
my @ret = ();
|
|
Packit |
95306a |
foreach my $e (@list) {
|
|
Packit |
95306a |
my($d,@n) = @$e;
|
|
Packit |
95306a |
my $v = $d->value();
|
|
Packit |
95306a |
push(@ret,$v,[@n]);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
return \@ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
push(@list,[$date2]);
|
|
Packit |
95306a |
my %ret;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if ($flag==1) {
|
|
Packit |
95306a |
while ($#list > 0) {
|
|
Packit |
95306a |
my($d0,@n) = @{ shift(@list) };
|
|
Packit |
95306a |
my $d1 = $list[0]->[0];
|
|
Packit |
95306a |
my $delta = $d0->calc($d1);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
foreach $flag (@n) {
|
|
Packit |
95306a |
$flag = '' if (! defined($flag));
|
|
Packit |
95306a |
if (exists $ret{$flag}) {
|
|
Packit |
95306a |
$ret{$flag} = $ret{$flag}->calc($delta);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$ret{$flag} = $delta;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} elsif ($flag==2) {
|
|
Packit |
95306a |
while ($#list > 0) {
|
|
Packit |
95306a |
my($d0,@n) = @{ shift(@list) };
|
|
Packit |
95306a |
my $d1 = $list[0]->[0];
|
|
Packit |
95306a |
my $delta = $d0->calc($d1);
|
|
Packit |
95306a |
$flag = join("+",sort(@n));
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (exists $ret{$flag}) {
|
|
Packit |
95306a |
$ret{$flag} = $ret{$flag}->calc($delta);
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
$ret{$flag} = $delta;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
warn "ERROR: Invalid flag $flag\n";
|
|
Packit |
95306a |
return [];
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
foreach my $flag (keys %ret) {
|
|
Packit |
95306a |
$ret{$flag} = $ret{$flag}->value();
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return \%ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
# ADDITIONAL ROUTINES
|
|
Packit |
95306a |
########################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DayOfWeek {
|
|
Packit |
95306a |
my($m,$d,$y) = @_;
|
|
Packit |
95306a |
return $dmb->day_of_week([$y,$m,$d]);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_SecsSince1970 {
|
|
Packit |
95306a |
my($m,$d,$y,$h,$mn,$s) = @_;
|
|
Packit |
95306a |
return $dmb->secs_since_1970([$y,$m,$d,$h,$mn,$s]);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_SecsSince1970GMT {
|
|
Packit |
95306a |
my($m,$d,$y,$h,$mn,$s) = @_;
|
|
Packit |
95306a |
$date->set('date',[$y,$m,$d,$h,$mn,$s]);
|
|
Packit |
95306a |
return $date->secs_since_1970_GMT();
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DaysSince1BC {
|
|
Packit |
95306a |
my($m,$d,$y) = @_;
|
|
Packit |
95306a |
return $dmb->days_since_1BC([$y,$m,$d]);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DayOfYear {
|
|
Packit |
95306a |
my($m,$d,$y) = @_;
|
|
Packit |
95306a |
return $dmb->day_of_year([$y,$m,$d]);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_NthDayOfYear {
|
|
Packit |
95306a |
my($y,$n) = @_;
|
|
Packit |
95306a |
my @ret = @{ $dmb->day_of_year($y,$n) };
|
|
Packit |
95306a |
push(@ret,0,0,0) if ($#ret == 2);
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DaysInMonth {
|
|
Packit |
95306a |
my($m,$y) = @_;
|
|
Packit |
95306a |
return $dmb->days_in_month($y,$m);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DaysInYear {
|
|
Packit |
95306a |
my($y) = @_;
|
|
Packit |
95306a |
return $dmb->days_in_year($y);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_WeekOfYear {
|
|
Packit |
95306a |
my($m,$d,$y,$first) = @_;
|
|
Packit |
95306a |
my($yy,$ww) = $dmb->_week_of_year($first,[$y,$m,$d]);
|
|
Packit |
95306a |
return 0 if ($yy<$y);
|
|
Packit |
95306a |
return 53 if ($yy>$y);
|
|
Packit |
95306a |
return $ww;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_LeapYear {
|
|
Packit |
95306a |
my($y) = @_;
|
|
Packit |
95306a |
return $dmb->leapyear($y);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_DaySuffix {
|
|
Packit |
95306a |
my($d) = @_;
|
|
Packit |
95306a |
return $$dmb{'data'}{'wordlist'}{'nth_dom'}[$d-1];
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_TimeZone {
|
|
Packit |
95306a |
my($ret) = $dmb->_now('tz');
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_ConvTZ {
|
|
Packit |
95306a |
my($str,$from,$to) = @_;
|
|
Packit |
95306a |
$from = $dmb->_now('tz') if (! $from);
|
|
Packit |
95306a |
$to = $dmb->_now('tz') if (! $to);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Parse the date (ignoring timezone information):
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $err = $dateUT->parse($str);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
my $d = [ $dateUT->value() ];
|
|
Packit |
95306a |
return '' if (! $d);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Get the timezone for $from. First, we'll assume that
|
|
Packit |
95306a |
# the date matches exactly (so if the timezone is passed
|
|
Packit |
95306a |
# in as an abbreviation, we'll try to get the timezone
|
|
Packit |
95306a |
# that fits the date/abbrev combination). If we can't,
|
|
Packit |
95306a |
# we'll just assume that the timezone is more generic
|
|
Packit |
95306a |
# and try it without the date.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $tmp;
|
|
Packit |
95306a |
$tmp = $dmt->zone($from,$d);
|
|
Packit |
95306a |
if (! $tmp) {
|
|
Packit |
95306a |
$tmp = $dmt->zone($from);
|
|
Packit |
95306a |
return '' if (! $tmp);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$from = $tmp;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$tmp = $dmt->zone($to,$d);
|
|
Packit |
95306a |
if (! $tmp) {
|
|
Packit |
95306a |
$tmp = $dmt->zone($to);
|
|
Packit |
95306a |
return '' if (! $tmp);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
$to = $tmp;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
($err,$d) = $dmt->convert($d,$from,$to);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
return $dmb->join('date',$d);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_IsWorkDay {
|
|
Packit |
95306a |
my($str,$checktime) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($str);
|
|
Packit |
95306a |
return '' if ($err);
|
|
Packit |
95306a |
return $date->is_business_day($checktime);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_IsHoliday {
|
|
Packit |
95306a |
my($str) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($str);
|
|
Packit |
95306a |
return undef if ($err);
|
|
Packit |
95306a |
if (wantarray) {
|
|
Packit |
95306a |
my @ret = $date->holiday();
|
|
Packit |
95306a |
return @ret;
|
|
Packit |
95306a |
} else {
|
|
Packit |
95306a |
my $ret = $date->holiday();
|
|
Packit |
95306a |
return $ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
sub Date_Cmp {
|
|
Packit |
95306a |
my($str1,$str2) = @_;
|
|
Packit |
95306a |
my $err = $date->parse($str1);
|
|
Packit |
95306a |
return undef if ($err);
|
|
Packit |
95306a |
$err = $date2->parse($str2);
|
|
Packit |
95306a |
return undef if ($err);
|
|
Packit |
95306a |
return $date->cmp($date2);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
1;
|
|
Packit |
95306a |
# Local Variables:
|
|
Packit |
95306a |
# mode: cperl
|
|
Packit |
95306a |
# indent-tabs-mode: nil
|
|
Packit |
95306a |
# cperl-indent-level: 3
|
|
Packit |
95306a |
# cperl-continued-statement-offset: 2
|
|
Packit |
95306a |
# cperl-continued-brace-offset: 0
|
|
Packit |
95306a |
# cperl-brace-offset: 0
|
|
Packit |
95306a |
# cperl-brace-imaginary-offset: 0
|
|
Packit |
95306a |
# cperl-label-offset: 0
|
|
Packit |
95306a |
# End:
|