# This module is part of da_reference, and is released # under the terms of the GPL version 2, or any later version. See the # file README and COPYING for more information. # Copyright 2003 by Don Armstrong . # $Id$ package Reference::Field::Date; =head1 NAME -- =head1 SYNOPSIS =head1 DESCRIPTION =head1 BUGS None known. =cut use strict; use vars qw($REVISION $DEBUG); use NEXT; use Params::Validate qw(:types validate_with); use Date::Manip; BEGIN{ ($REVISION) = q$LastChangedRevision$ =~ /\$LastChangedRevision:\s+([^\s+])/; $DEBUG = 0 unless defined $DEBUG; } =head2 date XXX DOCUMENT ME =cut sub date{ my $self = shift; my %params; if (scalar(@_) == 1) { $params{date} = shift; $params{output} = 'scalar'; } else { %params = validate_with(params => \@_, spec => {date => {type => ARRAYREF|SCALAR|HASHREF|UNDEF, optional => 1, }, day => {type => SCALAR|UNDEF, optional => 1, }, year => {type => SCALAR|UNDEF, optional => 1, }, month => {type => SCALAR|UNDEF, optional => 1, }, output => {default => 'scalar', type => SCALAR, }, }, ); } # Update author according to the passed information if (defined $params{day} or defined $params{year} or defined $params{month}) { $self->{reference}->{date}->{day} = $params{day} if defined $params{day}; $self->{reference}->{date}->{year} = $params{year} if defined $params{year}; $self->{reference}->{date}->{month} = $params{month} if defined $params{month}; } elsif (defined $params{date}) { $self->{reference}->{date} = {day => undef, year => undef, month => undef, }; my $date = ParseDate($params{date}); $self->{reference}->{date}->{unix} = $date; ($self->{reference}->{date}->{day}, $self->{reference}->{date}->{year}, $self->{reference}->{date}->{month}) = UnixDate($date,qw(%e %Y %m)); } local $_ = $params{output}; if (/bibtex/) { return UnixDate($self->{reference}->{date}->{unix},'%B %e %Y') if defined $self->{reference}->{date}->{unix}; return join(' ',$self->{reference}->{date}->{day},$self->{reference}->{date}->{year},$self->{reference}->{date}->{month}); } elsif (/year/) { return UnixDate($self->{reference}->{date}->{unix},'%Y') if defined $self->{reference}->{date}->{unix}; return $self->{reference}->{date}->{year}; } else { return UnixDate($self->{reference}->{date}->{unix},'%B %e %Y') if defined $self->{reference}->{date}->{unix}; return join(' ',$self->{reference}->{date}->{day},$self->{reference}->{date}->{year},$self->{reference}->{date}->{month}); } } =head2 year Returns the year associated with the date field =cut sub year{ my $self = shift; return $self->{reference}->{date}->{year}; } =head2 day Returns the day associated with the date field =cut sub day{ my $self = shift; return $self->{reference}->{date}->{day}; } =head2 month Returns the month associated with the date field =cut sub month{ my $self = shift; return $self->{reference}->{date}->{month}; } sub _init{ my $self = shift; $self->{reference}->{date} = {month => undef, year => undef, day => undef, unix => undef, }; $self->NEXT::_init; } 1; __END__