Ready for 7.10.29 development.
This commit is contained in:
commit
c806f99b7b
4236 changed files with 1217679 additions and 0 deletions
121
lib/WebGUI/Macro/ConvertUTCToTZ.pm
Normal file
121
lib/WebGUI/Macro/ConvertUTCToTZ.pm
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
package WebGUI::Macro::ConvertUTCToTZ;
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
||||
#-------------------------------------------------------------------
|
||||
# Please read the legal notices (docs/legal.txt) and the license
|
||||
# (docs/license.txt) that came with this distribution before using
|
||||
# this software.
|
||||
#-------------------------------------------------------------------
|
||||
# http://www.plainblack.com info@plainblack.com
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
use strict;
|
||||
use DateTime;
|
||||
use DateTime::Format::Strptime;
|
||||
use WebGUI::DateTime;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Package WebGUI::Macro::ConvertUTCToTZ
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Take input of any full timezone string, format, YYYY-MM-DD, HH:MM:SS
|
||||
and convert it from UTC to the designated timezone when a time component is provided.
|
||||
|
||||
Without a time component, will return UTC date at midnight.
|
||||
|
||||
=head2 process( $session, $toTZ, $format, $date, $time )
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
A session variable
|
||||
|
||||
=item *
|
||||
|
||||
toTZ - any DateTime::TimeZone TZ designation (e.g. 'Chicago/America', '+630', etc.)
|
||||
(if not set, will default to user's currently configured timezone)
|
||||
|
||||
=item *
|
||||
|
||||
format - perl DateTime format string
|
||||
(if not set, will default to user's currently configured dateFormat preference)
|
||||
|
||||
=item *
|
||||
|
||||
date - Date component formatted as YYYY-MM-DD
|
||||
|
||||
=item *
|
||||
|
||||
time - time component formatted as HH:MM:SS
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub process {
|
||||
my ( $session, $toTZ, $format, $date, $time ) = @_;
|
||||
|
||||
my $uTZ = $session->user->profileField("timeZone");
|
||||
my $uFormat = $session->user->profileField("dateFormat");
|
||||
|
||||
$toTZ ||= $uTZ;
|
||||
$format ||= $uFormat;
|
||||
|
||||
my ( $year, $month, $day );
|
||||
if ($date) {
|
||||
( $year, $month, $day ) = split /[\/\-\.]/, $date;
|
||||
$date =~ s/\s//msg; # remove all whitespace including newlines
|
||||
}
|
||||
|
||||
my $dt = WebGUI::DateTime->now;
|
||||
|
||||
unless ( $year ) {
|
||||
$year = $dt->year;
|
||||
}
|
||||
|
||||
unless ( $month ) {
|
||||
$month = $dt->month;
|
||||
}
|
||||
|
||||
unless ( $day ) {
|
||||
$day = $dt->day;
|
||||
}
|
||||
|
||||
my $formatter = DateTime::Format::Strptime->new( pattern => $format );
|
||||
|
||||
my ( $hour, $minute, $second );
|
||||
if ( $time ) {
|
||||
$time =~ s/^\s+//msg; # remove all whitespace including newlines
|
||||
( $hour, $minute, $second ) = split /\:/, $time;
|
||||
}
|
||||
my $dtOut = DateTime->new(
|
||||
year => $year,
|
||||
month => $month,
|
||||
day => $day,
|
||||
hour => $hour || 0,
|
||||
minute => $minute || 0,
|
||||
second => $second || 0,
|
||||
time_zone => 'UTC',
|
||||
);
|
||||
|
||||
# If no time component, we use the date as provided with no conversion
|
||||
# Without a time to convert between, there is no point to altering the date
|
||||
if ( $time ) {
|
||||
$dtOut->set_time_zone($toTZ);
|
||||
}
|
||||
$dtOut->set_formatter($formatter);
|
||||
|
||||
# Stringify output
|
||||
return "" . $dtOut;
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
#vim:ft=perl
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue