Fix to correctly cache cloned locale with military time
This commit is contained in:
parent
73b2322597
commit
4e54ce3f85
@ -2091,6 +2091,7 @@ code or preserve the original, old logic
|
||||
sub make_date
|
||||
{
|
||||
my ($secs, $only, $fmt) = @_;
|
||||
state $locale_military_name;
|
||||
$secs ||= 0;
|
||||
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
|
||||
if (!$@ && $] > 5.011) {
|
||||
@ -2115,18 +2116,24 @@ if (!$@ && $] > 5.011) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Allow forcing military time
|
||||
my $force_military_time;
|
||||
# Pre-process time locale
|
||||
my $locale_military_status = sub {
|
||||
return ($locale_military_name && $locale_military_name =~ /[a-z]/i) ? 2 :
|
||||
($locale_military_name == 1) ? 1 : 0;
|
||||
};
|
||||
# Allow locales with military time (in 24h format)
|
||||
my $locale_name_loaded = &$locale_military_status() == 2 ?
|
||||
$locale_military_name : $locale_name;
|
||||
my $locale_name_initial = $locale_name;
|
||||
if ($locale_name =~ /[a-z]{2}24$/i) {
|
||||
if ($locale_name =~ /[a-z]{2}24$/i && &$locale_military_status() == 0) {
|
||||
$locale_name =~ s/^(.*?)24$/$1/;
|
||||
$force_military_time++;
|
||||
}
|
||||
# Load standard locale
|
||||
my $locale = DateTime::Locale->load($locale_name);
|
||||
$locale_name_loaded = $locale_name;
|
||||
$locale_military_name = 1;
|
||||
}
|
||||
# Load given locale
|
||||
my $locale = DateTime::Locale->load($locale_name_loaded);
|
||||
# Create a new locale out of base locale
|
||||
if ($force_military_time) {
|
||||
if (&$locale_military_status() == 1) {
|
||||
my %locale_data = $locale->locale_data;
|
||||
$locale_data{'code'} = $locale_name_initial;
|
||||
# Force 24h time
|
||||
@ -2134,9 +2141,11 @@ if (!$@ && $] > 5.011) {
|
||||
$locale_data{'glibc_datetime_format'} = '%a %d %b %Y %T %Z';
|
||||
$locale_data{'glibc_time_format'} = '%T';
|
||||
DateTime::Locale->register_from_data(%locale_data);
|
||||
# Load new locale
|
||||
$locale = DateTime::Locale->load($locale_name_initial);
|
||||
}
|
||||
# Load newly cloned locale in 24h time format
|
||||
$locale_military_name = $locale_name_loaded = $locale_name_initial;
|
||||
$locale = DateTime::Locale->load($locale_name_loaded);
|
||||
}
|
||||
|
||||
my $locale_format_full_tz = $locale->glibc_date_1_format; # Sat 20 Nov 2286 17:46:39 UTC
|
||||
my $locale_format_full = $locale->glibc_datetime_format; # Sat 20 Nov 2286 17:46:39
|
||||
my $locale_format_short = $locale->glibc_date_format; # 20/11/86
|
||||
@ -2171,15 +2180,15 @@ if (!$@ && $] > 5.011) {
|
||||
# my $xxxx = $locale->full_date_format;
|
||||
my $data = {
|
||||
# Wed Feb 8 05:09:39 PM UTC 2023
|
||||
'full-tz-utc' => DateTime->from_epoch(locale => $locale_name, epoch => $secs)->strftime($locale_format_full_tz),
|
||||
'full-tz-utc' => DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs)->strftime($locale_format_full_tz),
|
||||
# Wed Feb 8 07:10:01 PM EET 2023
|
||||
'full-tz' => DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_full_tz),
|
||||
'full-tz' => DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_full_tz),
|
||||
# Wed 08 Feb 2023 07:11:26 PM EET
|
||||
'full' => DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_full),
|
||||
'full' => DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_full),
|
||||
# 02/08/2023
|
||||
'short' => DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_short),
|
||||
'short' => DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_short),
|
||||
# 07:12:07 PM
|
||||
'time' => DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_time),
|
||||
'time' => DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_time),
|
||||
'ago' => $ago,
|
||||
'tz' => $tz,
|
||||
'delimiter' => $locale_format_delimiter,
|
||||
@ -2192,8 +2201,8 @@ if (!$@ && $] > 5.011) {
|
||||
|
||||
# %c alternative with full week and month and no seconds in time (complete)
|
||||
# Wednesday, February 8, 2023, 8:18 PM or 星期三, 2023年2月8日 20:18 or miércoles, 8 febrero 2023, 20:28
|
||||
$data->{'monthfull'} = DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime("%B");
|
||||
foreach (split(/\s+/, DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime("%A, %c"))) {
|
||||
$data->{'monthfull'} = DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime("%B");
|
||||
foreach (split(/\s+/, DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime("%A, %c"))) {
|
||||
if ($data->{'monthfull'} =~ /^$_/) {
|
||||
$data->{'complete'} .= "$data->{'monthfull'} "
|
||||
}
|
||||
@ -2228,12 +2237,12 @@ if (!$@ && $] > 5.011) {
|
||||
@date = grep { /\%/ } @date;
|
||||
$locale_format_short = join($locale_format_delimiter, @date);
|
||||
}
|
||||
my $date_format_short = DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_short);
|
||||
my $date_format_short = DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_short);
|
||||
if (!ref($only) && $only) {
|
||||
return $date_format_short;
|
||||
}
|
||||
else {
|
||||
my $date_format_time = DateTime->from_epoch(locale => $locale_name, epoch => $secs, time_zone => $tz)->strftime($locale_format_time);
|
||||
my $date_format_time = DateTime->from_epoch(locale => $locale_name_loaded, epoch => $secs, time_zone => $tz)->strftime($locale_format_time);
|
||||
$date_format_time = $date_format_time;
|
||||
$date_format_time =~ s/(\d+):(\d+):(\d+)(.*?)/$1:$2$4/;
|
||||
if ($main::webmin_script_type eq 'web') {
|
||||
|
Loading…
x
Reference in New Issue
Block a user