The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Rose::HTML::Form::Field::DateTime::EndDate;

use strict;

use base 'Rose::HTML::Form::Field::DateTime';

our $VERSION = '0.606';

sub inflate_value
{
  my($self) = shift;

  my $date = $self->SUPER::inflate_value(@_);

  return $date  unless(UNIVERSAL::isa($date, 'DateTime'));

  no warnings;
  # Pin to the last second of the day if no time is set
  $date->set(hour => 23, minute => 59, second => 59, nanosecond => 999999999)
    unless($self->input_value_filtered =~ /\d:\d|[ap]\.?m/i);

  return $date;
}

1;

__END__

=head1 NAME

Rose::HTML::Form::Field::DateTime::EndDate - Text field for an "end date" in a date range.

=head1 SYNOPSIS

    $field =
      Rose::HTML::Form::Field::DateTime::EndDate->new(
        label   => 'Date',
        name    => 'date', 
        default => '12/31/2002');

    print $field->internal_value; # "2002-12-31T23:59:59"
    print $field->output_value;   # "2002-12-31 11:59:59 PM"

    $field->input_value('blah');

    # "Could not parse date: blah"
    $field->validate or warn $field->error;

    $field->input_value('4/30/1980 5:30 p.m.');

    $dt = $field->internal_value; # DateTime object

    print $dt->hour;     # 17
    print $dt->day_name; # Wednesday

    print $field->html;
    ...

=head1 DESCRIPTION

L<Rose::HTML::Form::Field::DateTime::EndDate> is a subclass of L<Rose::HTML::Form::Field::DateTime> that pins the time to the very last nanosecond of the specified date (i.e., 23:59:59.999999999) if the time is left unspecified.

=head1 AUTHOR

John C. Siracusa (siracusa@gmail.com)

=head1 LICENSE

Copyright (c) 2010 by John C. Siracusa.  All rights reserved.  This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.