Bivio::UI::HTML::Format::DateTime
# Copyright (c) 1999-2010 bivio Software, Inc. All Rights Reserved. # $Id$ package Bivio::UI::HTML::Format::DateTime; use strict; use Bivio::Base 'UIHTML.Format'; my($_MONTHS) = [qw( N/A January February March April May June July August September October November December )]; my($_DT) = b_use('Type.DateTime'); my($_DTM) = b_use('UI.DateTimeMode'); sub get_widget_value { my(undef, $dt, $mode, $no_timezone) = @_; return '' unless defined($dt); $mode = defined($mode) ? $_DTM->from_any($mode) : $_DTM->get_default; my($op) = '_to_' . lc($mode->get_name); return (\&{$op})->($_DT->to_parts($dt), $dt) . ($no_timezone || $op eq '_to_rfc822' ? '' : ' GMT'); } sub _am_pm { my($hour) = @_; return $hour > 11 && $hour < 24 ? 'PM' : 'AM'; } sub _to_date { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf('%02d/%02d/%04d', $mon, $mday, $year); } sub _to_date_time { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf('%02d/%02d/%04d %02d:%02d:%02d', $mon, $mday, $year, $hour, $min, $sec); } sub _to_day_month3_year { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf('%02d-%.3s-%04d', $mday, $_MONTHS->[$mon], $year); } sub _to_day_month3_year_time { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf( '%02d-%.3s-%04d %02d:%02d:%02d', $mday, $_MONTHS->[$mon], $year, $hour, $min, $sec, ); } sub _to_day_month3_year_time_period { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf( '%02d-%.3s-%04d %02d:%02d:%02d %.2s', $mday, $_MONTHS->[$mon], $year, _twelve_hour($hour), $min, $sec, _am_pm($hour), ); } sub _to_full_month { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return $_MONTHS->[$mon]; } sub _to_full_month_and_year_uc { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return uc($_MONTHS->[$mon]) . ", $year"; } sub _to_full_month_day_and_year { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return $_MONTHS->[$mon] . " $mday, $year"; } sub _to_full_month_day_and_year_uc { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return uc($_MONTHS->[$mon]) . " $mday, $year"; } sub _to_hour_minute_am_pm_lc { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; ($min, $hour) = $_DT->get_parts($_DT->add_seconds($dt, 30), 'minute', 'hour'); return sprintf('%d:%02d %s', _twelve_hour($hour), $min, lc(_am_pm($hour))); } sub _to_month_and_day { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf('%02d/%02d', $mon, $mday); } sub _to_month_name_and_day_number { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return "$_MONTHS->[$mon] $mday"; } sub _to_rfc822 { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return $_DT->rfc822($dt); } sub _to_time { my($sec, $min, $hour, $mday, $mon, $year, $dt) = @_; return sprintf('%02d:%02d:%02d', $hour, $min, $sec); } sub _twelve_hour { my($hour) = @_; return $hour == 0 ? 12 : $hour > 12 ? $hour - 12 : $hour; } 1;