view release on metacpan or search on metacpan
SYNOPSIS
use DateTime;
use DateTime::Format::Intl;
my $dt = DateTime->now;
my $fmt = DateTime::Format::Intl->new(
# You can use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported. You can use 'gregory' or 'gregorian' indifferently
calendar => 'gregorian',
# see getNumberingSystems() in Locale::Intl for the supported number systems
numberingSystem => 'latn',
formatMatcher => 'best fit',
dateStyle => 'long',
timeStyle => 'long',
},
) || die( DateTime::Format::Intl->error );
say $fmt->format( $dt );
my $fmt = DateTime::Format::Intl->new(
# You can also use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported
calendar => 'gregorian',
numberingSystem => 'latn',
hour12 => 0,
timeZone => 'Asia/Tokyo',
weekday => 'long',
era => 'short',
year => 'numeric',
month => '2-digit',
day => '2-digit',
dayPeriod => 'long',
hour => '2-digit',
The locale matching algorithm to use. Possible values are "lookup"
and "best fit"; the default is "best fit". For information about
this option, see Locale identification and negotiation
<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/G
lobal_Objects/Intl#locale_identification_and_negotiation>.
Whatever value you provide, does not actually have any influence on
the algorithm used. "best fit" will always be the one used.
* "calendar"
The calendar to use, such as "chinese", "gregorian" (or "gregory"),
"persian", and so on. For a list of calendar types, see
Intl.Locale.prototype.getCalendars()
<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/G
lobal_Objects/Intl/Locale/getCalendars#supported_calendar_types>,
and the perl module Locale::Intl. This option can also be set
through the "ca" Unicode extension key; if both are provided, this
options property takes precedence. See "ca" in Locale::Unicode
For example, a Japanese locale with the "japanese" calendar
extension set:
my $fmt = DateTime::Format::Intl->new( 'ja-Kana-JP-u-ca-japanese' );
The only value calendar type supported by this module is
"gregorian". Any other value will return an error.
* "numberingSystem"
The numbering system to use for number formatting, such as
"fullwide", "hant", "mathsans", and so on. For a list of supported
numbering system types, see getNumberingSystems(). This option can
also be set through the nu Unicode extension key; if both are
provided, this options property takes precedence.
The string used for the minute, for example 00.
* "month"
The string used for the month, for example 12.
* "relatedYear"
The string used for the related 4-digit Gregorian year, in the event
that the calendar's representation would be a yearName instead of a
year, for example 2019.
* "second"
The string used for the second, for example 07 or 42.
* "timeZoneName"
The string used for the name of the time zone, for example "UTC".
Default is the timezone of the current environment.
following properties reflecting the "locale" and date and time
formatting "options" computed during the object instantiation.
* "locale"
The BCP 47 language tag for the locale actually used. If any Unicode
extension values were requested in the input BCP 47 language tag
that led to this locale, the key-value pairs that were requested and
are supported for this locale are included in locale.
* "calendar"
E.g. "gregory"
* "numberingSystem"
The values requested using the Unicode extension keys "ca" and "nu"
or filled in as default values.
* "timeZone"
# SYNOPSIS
use DateTime;
use DateTime::Format::Intl;
my $dt = DateTime->now;
my $fmt = DateTime::Format::Intl->new(
# You can use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported. You can use 'gregory' or 'gregorian' indifferently
calendar => 'gregorian',
# see getNumberingSystems() in Locale::Intl for the supported number systems
numberingSystem => 'latn',
formatMatcher => 'best fit',
dateStyle => 'long',
timeStyle => 'long',
},
) || die( DateTime::Format::Intl->error );
say $fmt->format( $dt );
my $fmt = DateTime::Format::Intl->new(
# You can also use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported
calendar => 'gregorian',
numberingSystem => 'latn',
hour12 => 0,
timeZone => 'Asia/Tokyo',
weekday => 'long',
era => 'short',
year => 'numeric',
month => '2-digit',
day => '2-digit',
dayPeriod => 'long',
hour => '2-digit',
Supported options are:
### Locale options
- `localeMatcher`
The locale matching algorithm to use. Possible values are `lookup` and `best fit`; the default is `best fit`. For information about this option, see [Locale identification and negotiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/R...
Whatever value you provide, does not actually have any influence on the algorithm used. `best fit` will always be the one used.
- `calendar`
The calendar to use, such as `chinese`, `gregorian` (or `gregory`), `persian`, and so on. For a list of calendar types, see [Intl.Locale.prototype.getCalendars()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/In...
For example, a Japanese locale with the `japanese` calendar extension set:
my $fmt = DateTime::Format::Intl->new( 'ja-Kana-JP-u-ca-japanese' );
The only value calendar type supported by this module is `gregorian`. Any other value will return an error.
- `numberingSystem`
The numbering system to use for number formatting, such as `fullwide`, `hant`, `mathsans`, and so on. For a list of supported numbering system types, see [getNumberingSystems()](https://metacpan.org/pod/Locale%3A%3AIntl#getNumberingSystems). This...
For example, a Japanese locale with the `jpanfin` number system extension set and with the `jptyo` time zone:
my $fmt = DateTime::Format::Intl->new( 'ja-u-nu-jpanfin-tz-jptyo' );
See [Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getNumberingSystems), and also the perl module [Locale::Intl](https://metacpan.org/pod/Locale%3A%3AIntl)
- `minute`
The string used for the minute, for example `00`.
- `month`
The string used for the month, for example `12`.
- `relatedYear`
The string used for the related 4-digit Gregorian year, in the event that the calendar's representation would be a yearName instead of a year, for example `2019`.
- `second`
The string used for the second, for example `07` or `42`.
- `timeZoneName`
The string used for the name of the time zone, for example `UTC`. Default is the timezone of the current environment.
- `weekday`
The string used for the yearName in relevant contexts, for example `geng-zi`
## resolvedOptions
The `resolvedOptions()` method returns an hash reference with the following properties reflecting the `locale` and date and time formatting `options` computed during the object instantiation.
- `locale`
The BCP 47 language tag for the locale actually used. If any Unicode extension values were requested in the input BCP 47 language tag that led to this locale, the key-value pairs that were requested and are supported for this locale are included ...
- `calendar`
E.g. `gregory`
- `numberingSystem`
The values requested using the Unicode extension keys `ca` and `nu` or filled in as default values.
- `timeZone`
The value provided for this property in the options argument; defaults to the runtime's default time zone. Should never be undefined.
lib/DateTime/Format/Intl.pm view on Meta::CPAN
my $locale;
# Test for the locale data availability
LOCALE_AVAILABILITY: foreach my $loc ( @$test_locales )
{
my $tree = $cldr->make_inheritance_tree( $loc ) ||
return( $self->pass_error( $cldr->error ) );
# We remove the last 'und' special fallback locale
pop( @$tree );
foreach my $l ( @$tree )
{
my $ref = $cldr->calendar_formats_l10n(
locale => $l,
calendar => 'gregorian',
);
return( $self->pass_error( $cldr->error ) ) if( !defined( $ref ) && $cldr->error );
if( $ref )
{
if( Scalar::Util::blessed( $loc ) && ref( $loc ) eq 'Locale::Intl' )
{
$locale = $loc;
}
else
{
lib/DateTime/Format/Intl.pm view on Meta::CPAN
@core_options = qw( day month year );
@$opts{ @core_options } = @$defaults{ @core_options };
undef( $defaults );
}
else
{
# RangeError: invalid value "plop" for option month
my %valid_options =
(
localeMatcher => ['lookup', 'best fit'],
# calendar is processed separately
# numberingSystem is processed separately
calendar => qr/[a-zA-Z][a-zA-Z0-9]+(?:\-[a-zA-Z][a-zA-Z0-9]+)*/,
numberingSystem => qr/[a-zA-Z][a-zA-Z0-9]+/,
timeZone => qr/[a-zA-Z0-9\/\_\-\+]+/,
year => [qw( numeric 2-digit )],
month => [qw( numeric 2-digit long short narrow )],
day => [qw( numeric 2-digit )],
hour => [qw( numeric 2-digit )],
minute => [qw( numeric 2-digit )],
second => [qw( numeric 2-digit )],
hour12 => [qw( 1 0 ), undef],
# short: 12/20/2012, GMT+9
lib/DateTime/Format/Intl.pm view on Meta::CPAN
) )
{
return( $self->error( "You cannot specify any date-time option while using either dateStyle or timeStyle" ) );
}
my $resolved =
{
locale => $locale,
};
@$resolved{ @core_options } = @$opts{ @core_options };
my $calendar = $opts->{calendar};
my $tz = $opts->{timeZone};
my $tzNameOpt = $opts->{timeZoneName};
my $date_style = $opts->{dateStyle};
my $time_style = $opts->{timeStyle};
my $hc = $opts->{hourCycle};
my $h12 = $opts->{hour12};
my $pattern;
my $num_sys = $opts->{numberingSystem};
if( !$calendar )
{
if( $calendar = $locale->calendar )
{
$opts->{calendar} = $calendar;
}
else
{
$opts->{calendar} = $calendar = 'gregorian';
}
}
$calendar = 'gregorian' if( $calendar eq 'gregory' );
if( lc( $calendar ) ne 'gregory' &&
lc( $calendar ) ne 'gregorian' )
{
warn( "The local provided has the calendar attribute set to \"${calendar}\", but this API only supports \"gregory\" or \"gregorian\"." ) if( warnings::enabled() );
$calendar = 'gregorian';
}
$resolved->{calendar} = $calendar;
# NOTE: timeStyle or hour is define, we do some check and processing for interdependency
if( length( $time_style // '' ) || $opts->{hour} )
{
# Surprisingly, the 'hour12' option takes precedence over the 'hourCycle' even though the latter is more specific.
# I tried it in browser console:
# const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
# hour12: true, hour: "numeric", hourCycle: "h24"
# console.log( new Intl.DateTimeFormat('en-US', { hour12: true, hour: "numeric", hourCycle: "h24" }).resolvedOptions() );
# results in the following resolvedOptions:
# {
# calendar: "gregory",
# hour: "2-digit",
# hour12: false,
# hourCycle: "h23",
# locale: "en-US",
# numberingSystem: "latn",
# timeZone: "Asia/Tokyo
# }
# "When true, this option sets hourCycle to either "h11" or "h12", depending on the locale. When false, it sets hourCycle to "h23". hour12 overrides both the hc locale extension tag and the hourCycle option, should either or both of those be ...
if( defined( $h12 ) )
{
lib/DateTime/Format/Intl.pm view on Meta::CPAN
{
'abbreviated' => 'short',
'wide' => 'long',
};
my $tree = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
my $width;
my $supported = {};
LOCALE: foreach my $loc ( @$tree )
{
my $all = $cldr->calendar_eras_l10n(
locale => $loc,
calendar => $calendar,
);
return( $self->pass_error( $cldr->error ) ) if( !defined( $all ) && $cldr->error );
if( $all )
{
foreach my $this ( @$all )
{
$supported->{ ( $width_map->{ $this->{era_width} } // $this->{era_width} ) }++;
}
if( exists( $supported->{ $era } ) )
lib/DateTime/Format/Intl.pm view on Meta::CPAN
{
'abbreviated' => 'short',
'wide' => 'long',
};
my $tree = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
my $width;
my $supported = {};
LOCALE: foreach my $loc ( @$tree )
{
my $all = $cldr->calendar_terms(
locale => $loc,
calendar => $calendar,
term_type => $prop,
term_context => 'format',
);
return( $self->pass_error( $cldr->error ) ) if( !defined( $all ) && $cldr->error );
if( $all && scalar( @$all ) )
{
foreach my $this ( @$all )
{
$supported->{ ( $width_map->{ $this->{term_width} } // $this->{term_width} ) }++;
}
lib/DateTime/Format/Intl.pm view on Meta::CPAN
{
return( $self->error( "The pattern object provided (", overload::StrVal( $pattern_object // 'undef' ), ") is not a DateTime::Format::Intl::Skeleton object." ) );
}
my $unicode = $self->{_unicode} || die( "The DateTime::Locale::FromCLDR object is gone." );
my $component_precision = {};
my $options_map = $self->_get_options_map;
my $component_to_match =
{
# Those are not related to pattern, but because they are in our options we add them here to avoid an error, but discard them later
calendar => undef,
numberingSystem => undef,
# This option is used as an ancillary value to hourCycle option
hour12 => undef,
# hourCycle itself is only present if the option 'hour' is set
hourCycle => undef,
locale => undef,
timeZone => undef,
era => sub
{
return( ['G' => 'G' x $options_map->{type_to_length}->{ $opts->{era} } ] );
lib/DateTime/Format/Intl.pm view on Meta::CPAN
if( ref( $pattern ) && !overload::Method( $pattern => '""' ) )
{
die( "The pattern value provided (", overload::StrVal( $pattern ), ") is a reference (", ref( $pattern ), "), but it does not stringify." );
}
elsif( ref( $missing ) ne 'ARRAY' )
{
die( "The value provided for missing components (", overload::StrVal( $missing ), ") is not an array reference." );
}
my $cldr = $self->{_cldr} || die( "The Locale::Unicode::Data object is gone." );
my $locale = $self->{locale} || die( "The locale value is gone!" );
my $calendar = $self->{calendar} || 'gregorian';
my $alias =
{
'c' => 'E',
'e' => 'E',
'H' => 'h',
'k' => 'h',
'K' => 'h',
'L' => 'M',
'v' => 'Z',
};
my $missing_hash = +{ map{ ( $alias->{ $_ } // $_ ) => $_ } @$missing };
# my @ordered_options = qw( era year month weekday day dayPeriod hour minute second timeZoneName );
# becomes:
my @ordered_options = qw( G y M E d B h m s Z );
# Possible components found in skeleton in CLDR data: [qw( B E G H M Q W Z c d h m s v w y )]
# All possible format ID known in the CLDR calendar_append_formats table
my $map =
{
# 'B' has no correspondence in table calendar_append_formats, but has in table date_terms
'c' => ['Day-Of-Week' => 'weekday'],
'd' => ['Day' => 'day'],
'e' => ['Day-Of-Week' => 'weekday'],
'E' => ['Day-Of-Week' => 'weekday'],
'G' => ['Era' => 'era'],
'h' => ['Hour' => 'hour'],
'H' => ['Hour' => 'hour'],
'k' => ['Hour' => 'hour'],
'K' => ['Hour' => 'hour'],
'L' => ['Month' => 'month'],
lib/DateTime/Format/Intl.pm view on Meta::CPAN
my $tree = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
my $get_append_pattern = sub
{
my $elem = shift( @_ );
# e.g.: {0} {1}
# or: {0} ({2}: {1})
my $pat;
foreach my $loc ( @$tree )
{
my $ref = $cldr->calendar_append_format(
format_id => $elem,
locale => $loc,
calendar => $calendar,
);
return( $self->pass_error( $cldr->error ) ) if( !defined( $ref ) && $cldr->error );
if( $ref )
{
$pat = $ref->{format_pattern};
last;
}
}
return( $pat // '' );
};
lib/DateTime/Format/Intl.pm view on Meta::CPAN
die( "Uneven number of parameters provided." );
}
return( $ref );
}
sub _get_available_format_patterns
{
my $self = shift( @_ );
my $cldr = $self->{_cldr} || die( "The Locale::Unicode::Data object is gone." );
my $locale = $self->{locale} || die( "The locale value is gone!" );
my $calendar = $self->{calendar} || 'gregorian';
# "The dateFormatItems inherit from their parent locale, so the inherited items need to be considered when processing."
# <https://www.unicode.org/reports/tr35/tr35-dates.html#Mapping_Requested_Time_Skeletons_To_Patterns>
my $tree = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
# Keep track of the format skeleton already found, so we do not replace them while going up the tree
my $patterns = {};
local $" = ', ';
foreach my $loc ( @$tree )
{
my $all = $cldr->calendar_available_formats(
locale => $loc,
calendar => $calendar,
alt => undef,
# count might contain some value
);
return( $self->pass_error ) if( !defined( $all ) && $cldr->error );
if( $all && scalar( @$all ) )
{
for( @$all )
{
next if( exists( $patterns->{ $_->{format_id} } ) );
$patterns->{ $_->{format_id} } = $_->{format_pattern};
lib/DateTime/Format/Intl.pm view on Meta::CPAN
}
return( $patterns );
}
sub _get_available_interval_patterns
{
my $self = shift( @_ );
my $diff = shift( @_ ) || die( "No greatest difference component was provided." );
my $cldr = $self->{_cldr} || die( "The Locale::Unicode::Data object is gone." );
my $locale = $self->{locale} || die( "The locale value is gone!" );
my $calendar = $self->{calendar} || 'gregorian';
# Get all the interval patterns for the given greatest difference
# "The dateFormatItems inherit from their parent locale, so the inherited items need to be considered when processing."
# <https://www.unicode.org/reports/tr35/tr35-dates.html#Mapping_Requested_Time_Skeletons_To_Patterns>
my $tree = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
my $patterns = {};
local $" = ', ';
foreach my $loc ( @$tree )
{
my $all = $cldr->calendar_interval_formats(
locale => $loc,
calendar => $calendar,
greatest_diff_id => $diff,
);
if( $all && scalar( @$all ) )
{
for( @$all )
{
next if( exists( $patterns->{ $_->{format_id} } ) );
$patterns->{ $_->{format_id} } = $_;
}
# We do not stop here even though we may have a match, because we want to collect all the possible pattern throughout the locale's tree.
lib/DateTime/Format/Intl.pm view on Meta::CPAN
{
my $self = shift( @_ );
my $opts = $self->_get_args_as_hash( @_ );
my $width = $opts->{width} || die( "No datetime format width was provided." );
my $type = $opts->{type} || 'atTime';
die( "Bad datetime format '${type}'" ) if( $type ne 'atTime' && $type ne 'standard' );
my $cldr = $self->{_cldr} || die( "The Locale::Unicode::Data object is gone." );
my $locale = $self->{locale} || die( "Our Locale::Unicode object is gone!" );
my $locales = $cldr->make_inheritance_tree( $locale ) ||
return( $self->pass_error( $cldr->error ) );
my $calendar = $self->{calendar} || 'gregorian';
my $pattern;
foreach my $loc ( @$locales )
{
my $ref = $cldr->calendar_datetime_format(
locale => $loc,
calendar => $calendar,
format_type => $type,
format_length => $width,
);
return( $self->pass_error ) if( !defined( $ref ) && $cldr->error );
if( $ref && $ref->{format_pattern} )
{
$pattern = $ref->{format_pattern};
last;
}
}
lib/DateTime/Format/Intl.pm view on Meta::CPAN
return( 'B' x ( exists( $opts->{dayPeriod} ) ? $options_map->{type_to_length}->{ $opts->{dayPeriod} } : 1 ) );
},
# There is 1 instance in the CLDR data where the skeleton uses 'Z' (locale 'fa' with skeleton 'HHmmZ')
timeZoneName => sub
{
return( exists( $opts->{timeZoneName} ) ? $options_map->{timezone}->{ $opts->{timeZoneName} } : 'v' );
},
# 'w' (week of year) and 'W' (week of month) are also found in the skeletons. 309 and 322 times respectively.
# 'Q' (quarter) is also found 419 times in the skeletons, amazingly enough.
};
# SELECT DISTINCT(format_id) FROM calendar_available_formats WHERE format_id regexp('G') ORDER BY LENGTH(format_id), format_id;
# my $singletons =
# {
# # Bh, Bhm, Bhms, EBhm, EBhms
# 'B' => 1,
# # 'c' can have multiple occurrence
# # 'd' can have multiple occurrence
# # E can have multiple occurrence
# # Gy, GyM, GyMd, GyMMM, GyMMMM, GyMMMd, GyMMMEd, GyMMMMd, GyMEEEEd, GyMMMMEd, GyMMMEEEEd
# 'G' => 1,
# # H, h, K, k can have multiple occurrence
lib/DateTime/Format/Intl.pm view on Meta::CPAN
# <https://www.unicode.org/reports/tr35/tr35-dates.html#Missing_Skeleton_Fields>
elsif( (
( $best_score >= 0 && scalar( @{$best_score_object->missing // []} ) ) ||
$best_score < 0
) &&
scalar( @{$request_object->date_components // []} ) &&
scalar( @{$request_object->time_components // []} ) &&
!$diff &&
!$args->{subprocess} )
{
my @core_options = qw( calendar hour12 hourCycle locale numberingSystem timeZone );
my @date_options = ( qw( era year month weekday day ), @core_options );
my @time_options = ( qw( hour minute second timeZoneName ), @core_options );
# "1. Divide the request into a date fields part and a time fields part."
my $date_opts = +{ map{ $_ => $opts->{ $_ } } grep( exists( $opts->{ $_ } ), @date_options ) };
my $time_opts = +{ map{ $_ => $opts->{ $_ } } grep( exists( $opts->{ $_ } ), @time_options ) };
# "2. For each part, find the matching dateFormatItem, and expand the pattern as above."
my $date_score_object = $self->_select_best_pattern(
options => $date_opts,
patterns => $available_patterns,
# To avoid risk of recurring calls, we tag it
lib/DateTime/Format/Intl.pm view on Meta::CPAN
=head1 SYNOPSIS
use DateTime;
use DateTime::Format::Intl;
my $dt = DateTime->now;
my $fmt = DateTime::Format::Intl->new(
# You can use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported. You can use 'gregory' or 'gregorian' indifferently
calendar => 'gregorian',
# see getNumberingSystems() in Locale::Intl for the supported number systems
numberingSystem => 'latn',
formatMatcher => 'best fit',
dateStyle => 'long',
timeStyle => 'long',
},
) || die( DateTime::Format::Intl->error );
say $fmt->format( $dt );
my $fmt = DateTime::Format::Intl->new(
# You can also use ja-JP (Unicode / web-style) or ja_JP (system-style), it does not matter.
'ja_JP', {
localeMatcher => 'best fit',
# The only one supported
calendar => 'gregorian',
numberingSystem => 'latn',
hour12 => 0,
timeZone => 'Asia/Tokyo',
weekday => 'long',
era => 'short',
year => 'numeric',
month => '2-digit',
day => '2-digit',
dayPeriod => 'long',
hour => '2-digit',
lib/DateTime/Format/Intl.pm view on Meta::CPAN
=head3 Locale options
=over 4
=item * C<localeMatcher>
The locale matching algorithm to use. Possible values are C<lookup> and C<best fit>; the default is C<best fit>. For information about this option, see L<Locale identification and negotiation|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Re...
Whatever value you provide, does not actually have any influence on the algorithm used. C<best fit> will always be the one used.
=item * C<calendar>
The calendar to use, such as C<chinese>, C<gregorian> (or C<gregory>), C<persian>, and so on. For a list of calendar types, see L<Intl.Locale.prototype.getCalendars()|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/In...
For example, a Japanese locale with the C<japanese> calendar extension set:
my $fmt = DateTime::Format::Intl->new( 'ja-Kana-JP-u-ca-japanese' );
The only value calendar type supported by this module is C<gregorian>. Any other value will return an error.
=item * C<numberingSystem>
The numbering system to use for number formatting, such as C<fullwide>, C<hant>, C<mathsans>, and so on. For a list of supported numbering system types, see L<getNumberingSystems()|Locale::Intl/getNumberingSystems>. This option can also be set throug...
For example, a Japanese locale with the C<latn> number system extension set and with the C<jptyo> time zone:
my $fmt = DateTime::Format::Intl->new( 'ja-u-nu-latn-tz-jptyo' );
However, note that you can only provide a number system that is supported by the C<locale>, and whose type is C<numeric>, i.e. not C<algorithmic>. For instance, you cannot specify a C<locale> C<ar-SA> (arab as spoken in Saudi Arabia) with a number sy...
lib/DateTime/Format/Intl.pm view on Meta::CPAN
=item * C<minute>
The string used for the minute, for example C<00>.
=item * C<month>
The string used for the month, for example C<12>.
=item * C<relatedYear>
The string used for the related 4-digit Gregorian year, in the event that the calendar's representation would be a yearName instead of a year, for example C<2019>.
=item * C<second>
The string used for the second, for example C<07> or C<42>.
=item * C<timeZoneName>
The string used for the name of the time zone, for example C<UTC>. Default is the timezone of the current environment.
=item * C<weekday>
lib/DateTime/Format/Intl.pm view on Meta::CPAN
=head2 resolvedOptions
The C<resolvedOptions()> method returns an hash reference with the following properties reflecting the C<locale> and date and time formatting C<options> computed during the object instantiation.
=over 4
=item * C<locale>
The BCP 47 language tag for the locale actually used. If any Unicode extension values were requested in the input BCP 47 language tag that led to this locale, the key-value pairs that were requested and are supported for this locale are included in l...
=item * C<calendar>
E.g. C<gregory>
=item * C<numberingSystem>
The values requested using the Unicode extension keys C<ca> and C<nu> or filled in as default values.
=item * C<timeZone>
The value provided for this property in the options argument; defaults to the runtime's default time zone. Should never be undefined.
t/003_resolved_options.t view on Meta::CPAN
# NOTE: fr -> {timeStyle}
{
locale => 'fr',
options =>
{
timeStyle => 'long',
timeZone => 'Europe/Paris',
},
expects =>
{
calendar => 'gregorian',
hour12 => 0,
hourCycle => 'h23',
locale => 'fr',
numberingSystem => 'latn',
timeStyle => 'long',
timeZone => 'Europe/Paris',
},
},
# NOTE: ja-JP -> {dateStyle, timeZone}
{
locale => 'ja-JP',
options =>
{
dateStyle => 'long',
timeZone => 'Asia/Tokyo',
},
expects =>
{
calendar => 'gregorian',
dateStyle => 'long',
locale => 'ja-JP',
numberingSystem => 'latn',
timeZone => 'Asia/Tokyo',
},
},
# NOTE: fr-CH,de-CH -> {hour,minute,second, weekday,timeZone}
{
locale => ['fr-CH', 'de-CH'],
options =>
{
hour => 'numeric',
minute => 'numeric',
second => 'numeric',
weekday => 'long',
timeZone => 'Europe/Zurich',
},
expects =>
{
calendar => 'gregorian',
hour => '2-digit',
minute => '2-digit',
second => '2-digit',
locale => 'fr-CH',
hour12 => 0,
hourCycle => 'h23',
weekday => 'long',
numberingSystem => 'latn',
timeZone => 'Europe/Zurich',
},
t/003_resolved_options.t view on Meta::CPAN
# NOTE: ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo -> {timeZone}
{
# locale => 'ja-Kana-JP-u-ca-japanese-nu-jpanfin-tz-jptyo',
locale => 'ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo',
options =>
{
timeZone => 'Europe/Zurich',
},
expects =>
{
calendar => 'gregorian',
year => 'numeric',
month => 'numeric',
day => 'numeric',
# number system 'jpanfin' is actually ignored in web browsers, because it is not commonly used for datetime formatting
locale => 'ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo',
numberingSystem => 'latn',
# The time zone passed as option takes precedence over the locale 'ca' extension
timeZone => 'Europe/Zurich',
},
},
# NOTE: ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo -> {}
{
# locale => 'ja-Kana-JP-u-ca-japanese-nu-jpanfin-tz-jptyo',
locale => 'ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo',
options => {},
expects =>
{
calendar => 'gregorian',
year => 'numeric',
month => 'numeric',
day => 'numeric',
# number system 'jpanfin' is actually ignored in web browsers, because it is not commonly used for datetime formatting
locale => 'ja-Kana-JP-u-ca-gregory-nu-jpanfin-tz-jptyo',
numberingSystem => 'latn',
# The time zone passed as option takes precedence over the locale 'ca' extension
timeZone => 'Asia/Tokyo',
},
},
# NOTE: ar-EG-u-ca-gregory-nu-arab-tz-egcai -> {}
{
locale => 'ar-EG-u-ca-gregory-nu-arab-tz-egcai',
options => {},
expects =>
{
calendar => 'gregorian',
year => 'numeric',
month => 'numeric',
day => 'numeric',
locale => 'ar-EG-u-ca-gregory-nu-arab-tz-egcai',
numberingSystem => 'arab',
# The time zone passed as option takes precedence over the locale 'ca' extension
timeZone => 'Africa/Cairo',
},
},
# Checking all 47 possibilities
# NOTE: en -> {dayPeriod, hour
{
expects => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { dayPeriod => "short", hour => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {dayPeriod, hour, minute}
{
expects => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { dayPeriod => "short", hour => "numeric", minute => "numeric", timeZone => "UTC" },
},
# z
{
expects => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
},
t/003_resolved_options.t view on Meta::CPAN
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
second => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {weekday}
{
expects => {
calendar => "gregorian",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
locale => "en",
options => { weekday => "short", timeZone => "UTC" },
},
# NOTE: en -> {dayPeriod, hour, minute, weekday}
{
expects => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
t/003_resolved_options.t view on Meta::CPAN
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
weekday => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {dayPeriod, hour, minute, second, weekday}
{
expects => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
weekday => "short",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
minute => "numeric",
second => "numeric",
weekday => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, weekday}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
hour12 => 1,
minute => "numeric",
weekday => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, second, weekday}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
weekday => "short",
},
t/003_resolved_options.t view on Meta::CPAN
hour12 => 1,
minute => "numeric",
second => "numeric",
weekday => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {day, weekday}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
locale => "en",
options => { day => "numeric", weekday => "short", timeZone => "UTC" },
},
# NOTE: en -> {era, year}
{
expects => {
calendar => "gregorian",
era => "short",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { era => "short", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {era, month, year}
{
expects => {
calendar => "gregorian",
era => "short",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { era => "short", month => "short", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, era, month, weekday, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
era => "short",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
year => "numeric",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
era => "short",
month => "short",
weekday => "short",
year => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {day, era, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
era => "short",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { day => "numeric", era => "short", month => "short", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, era, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
era => "short",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => {
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { hour => "numeric", hour12 => 1, timeZone => "UTC" },
},
# NOTE: en -> {hour, hour12, minute}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { hour => "numeric", hour12 => 1, minute => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {hour, hour12, minute, second}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
hour12 => 1,
minute => "numeric",
second => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, second, timeZoneName}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
timeZoneName => "short",
},
t/003_resolved_options.t view on Meta::CPAN
hour12 => 1,
minute => "numeric",
second => "numeric",
timeZoneName => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, timeZoneName}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
timeZoneName => "short",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
hour12 => 1,
minute => "numeric",
timeZoneName => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {day, month}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { day => "numeric", month => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {month}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { month => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, weekday}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
locale => "en",
options => { day => "numeric", month => "numeric", weekday => "short", timeZone => "UTC" },
},
# NOTE: en -> {month}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { month => "short", timeZone => "UTC" },
},
# NOTE: en -> {day, month, weekday}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
},
locale => "en",
options => { day => "numeric", month => "short", weekday => "short", timeZone => "UTC" },
},
# NOTE: en -> {day, month}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "long",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { day => "numeric", month => "long", timeZone => "UTC" },
},
# NOTE: en -> {day, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "long",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { day => "numeric", month => "long", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { day => "numeric", month => "short", timeZone => "UTC" },
},
# NOTE: en -> {day}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { day => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {hour, hour12}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { hour => "numeric", hour12 => 1, timeZone => "UTC" },
},
# NOTE: en -> {hour, hour12, minute}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
},
locale => "en",
options => { hour => "numeric", hour12 => 1, minute => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {hour, hour12, minute, second}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
hour12 => 1,
minute => "numeric",
second => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, second, timeZoneName}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
timeZoneName => "short",
},
t/003_resolved_options.t view on Meta::CPAN
hour12 => 1,
minute => "numeric",
second => "numeric",
timeZoneName => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {hour, hour12, minute, timeZoneName}
{
expects => {
calendar => "gregorian",
hour => "numeric",
hour12 => 1,
hourCycle => "h12",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
timeZone => "UTC",
timeZoneName => "short",
},
locale => "en",
t/003_resolved_options.t view on Meta::CPAN
hour => "numeric",
hour12 => 1,
minute => "numeric",
timeZoneName => "short",
timeZone => "UTC",
},
},
# NOTE: en -> {minute, second}
{
expects => {
calendar => "gregorian",
locale => "en",
minute => "2-digit",
numberingSystem => "latn",
second => "2-digit",
timeZone => "UTC",
},
locale => "en",
options => { minute => "numeric", second => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {year}
{
expects => {
calendar => "gregorian",
locale => "en",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {month, year}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { month => "numeric", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, weekday, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
year => "numeric",
},
locale => "en",
options => {
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {month, year}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { month => "short", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, weekday, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
weekday => "short",
year => "numeric",
},
locale => "en",
options => {
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
timeZone => "UTC",
},
},
# NOTE: en -> {month, year}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "long",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { month => "long", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "short",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { day => "numeric", month => "short", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { day => "numeric", month => "numeric", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {month, year}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { month => "numeric", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {month, year}
{
expects => {
calendar => "gregorian",
locale => "en",
month => "long",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { month => "long", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {day, month, year}
{
expects => {
calendar => "gregorian",
day => "numeric",
locale => "en",
month => "numeric",
numberingSystem => "latn",
timeZone => "UTC",
year => "numeric",
},
locale => "en",
options => { day => "numeric", month => "numeric", year => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {minute}
# A singleton, not part of the available pattern
{
expects => {
calendar => "gregorian",
minute => "2-digit",
locale => "en",
timeZone => "UTC",
},
locale => "en",
options => { minute => "numeric", timeZone => "UTC" },
},
# NOTE: en -> {second}
# A singleton, not part of the available pattern
{
expects => {
calendar => "gregorian",
second => "2-digit",
locale => "en",
timeZone => "UTC",
},
locale => "en",
options => { second => "numeric", timeZone => "UTC" },
},
];
my $failed = [];
t/008_format_range.t view on Meta::CPAN
my $tests =
[
# NOTE: Test #0
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 16, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9 in the morning â 4 in the afternoon",
greatest_diff => "B",
locale => "en",
options => { calendar => "gregorian", dayPeriod => "short", hour => "numeric" },
pattern => "h Bâââh B",
skeleton => "Bh",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 11, minute => 0, month => 9, second => 0, year => 2024 },
expects => "10 â 11 in the morning",
greatest_diff => "h",
locale => "en",
options => { calendar => "gregorian", dayPeriod => "short", hour => "numeric" },
pattern => "hâââh B",
skeleton => "Bh",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 16, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9:30 in the morning â 4:30 in the afternoon",
greatest_diff => "B",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mm Bâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 11, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:30 â 11:30 in the morning",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mmâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:00 â 10:30 in the morning",
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mmâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "10 â 11",
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric" },
pattern => "dâââd",
skeleton => "d",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "-2024 BC â 2024 AD",
greatest_diff => "G",
locale => "en",
options => { calendar => "gregorian", era => "short", year => "numeric" },
pattern => "y Gââây G",
skeleton => "Gy",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "2023 â 2024 AD",
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", era => "short", year => "numeric" },
pattern => "yââây G",
skeleton => "Gy",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
expects => "8/-2024 BC â 8/2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/y GâââM/y G",
skeleton => "GyM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
expects => "7/2024 â 8/2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/yâââM/y G",
skeleton => "GyM",
},
# NOTE: Test #10
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/2023 â 9/2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/yâââM/y G",
skeleton => "GyM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/2024 â 9/11/2024 AD",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/-2024 BC â 9/10/2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/y GâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "8/10/2024 â 9/10/2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/2023 â 9/10/2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, 9/10/2024 â Wed, 9/11/2024 AD",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Fri, 9/10/-2024 BC â Tue, 9/10/2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/y GâââE, M/d/y G",
skeleton => "GyMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, 8/10/2024 â Tue, 9/10/2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sun, 9/10/2023 â Tue, 9/10/2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
expects => "Aug -2024 BC â Aug 2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM y GâââMMM y G",
skeleton => "GyMMM",
},
# NOTE: Test #20
{
date1 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
expects => "Jul â Aug 2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMMâââMMM y G",
skeleton => "GyMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 2023 â Sep 2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM yâââMMM y G",
skeleton => "GyMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10 â 11, 2024 AD",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM dâââd, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10, -2024 BC â Sep 10, 2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM d, y GâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Aug 10 â Sep 10, 2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM dâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10, 2023 â Sep 10, 2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM d, yâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, Sep 10 â Wed, Sep 11, 2024 AD",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Fri, Sep 10, -2024 BC â Tue, Sep 10, 2024 AD",
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, y GâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, Aug 10 â Tue, Sep 10, 2024 AD",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sun, Sep 10, 2023 â Tue, Sep 10, 2024 AD",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, yâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
# NOTE: Test #30
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 13, minute => 0, month => 9, second => 0, year => 2024 },
expects => "10 AM â 1 PM",
greatest_diff => "a",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h12" },
pattern => "hâ¯aâââhâ¯a",
skeleton => "h",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9 â 10 AM",
greatest_diff => "h",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h12" },
pattern => "hâââhâ¯a",
skeleton => "h",
},
{
date1 => { day => 10, hour => 13, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 14, minute => 0, month => 9, second => 0, year => 2024 },
expects => "13 â 14",
greatest_diff => "H",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h24" },
pattern => "HHâââHH",
skeleton => "H",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9:30 â 10:30 AM",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâ¯aâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9:00 â 10:00 AM",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:00 â 10:30 AM",
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "09:00 â 10:00",
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
},
pattern => "HH:mmâââHH:mm",
skeleton => "Hm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:00 â 10:30",
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
},
pattern => "HH:mmâââHH:mm",
skeleton => "Hm",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9:30 â 10:30 AM UTC Time",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâ¯aâââh:mmâ¯a v",
skeleton => "hmv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9:00 â 10:00 AM UTC Time",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâââh:mmâ¯a v",
skeleton => "hmv",
},
# NOTE: Test #40
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:00 â 10:30 AM UTC Time",
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâââh:mmâ¯a v",
skeleton => "hmv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "910:00 â UTC Time",
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
timeZoneName => "short",
},
pattern => "HH:mmâââHH:mm v",
skeleton => "Hmv",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "10:030 â UTC Time",
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
timeZoneName => "short",
},
pattern => "HH:mmâââHH:mm v",
skeleton => "Hmv",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9 â 10 AM UTC Time",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
timeZoneName => "short",
},
pattern => "hâ¯aâââhâ¯a v",
skeleton => "hv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9 â 10 AM UTC Time",
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
timeZoneName => "short",
},
pattern => "hâââhâ¯a v",
skeleton => "hv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "910 â UTC Time",
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
timeZoneName => "short",
},
pattern => "HHâââHH v",
skeleton => "Hv",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
expects => "6 â 7",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "numeric" },
pattern => "MâââM",
skeleton => "M",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10 â 9/11",
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "numeric" },
pattern => "M/dâââM/d",
skeleton => "Md",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "8/10 â 9/10",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "numeric" },
pattern => "M/dâââM/d",
skeleton => "Md",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, 9/10 â Wed, 9/11",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
},
pattern => "E, M/dâââE, M/d",
skeleton => "MEd",
},
# NOTE: Test #50
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, 8/10 â Tue, 9/10",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
},
pattern => "E, M/dâââE, M/d",
skeleton => "MEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
expects => "Jun â Jul",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "short" },
pattern => "MMMâââMMM",
skeleton => "MMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10 â 11",
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "short" },
pattern => "MMM dâââd",
skeleton => "MMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Aug 10 â Sep 10",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "short" },
pattern => "MMM dâââMMM d",
skeleton => "MMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, Sep 10 â Wed, Sep 11",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
},
pattern => "E, MMM dâââE, MMM d",
skeleton => "MMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, Aug 10 â Tue, Sep 10",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
},
pattern => "E, MMM dâââE, MMM d",
skeleton => "MMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "2023 â 2024",
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", year => "numeric" },
pattern => "yââây",
skeleton => "y",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "6/2024 â 9/2024",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "numeric", year => "numeric" },
pattern => "M/yâââM/y",
skeleton => "yM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/2023 â 9/2024",
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "numeric", year => "numeric" },
pattern => "M/yâââM/y",
skeleton => "yM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/2024 â 9/11/2024",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
# NOTE: Test #60
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "8/10/2024 â 9/10/2024",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/2023 â 9/10/2024",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, 9/10/2024 â Wed, 9/11/2024",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, 8/10/2024 â Tue, 9/10/2024",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sun, 9/10/2023 â Tue, 9/10/2024",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Jun â Sep 2024",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "short", year => "numeric" },
pattern => "MMMâââMMM y",
skeleton => "yMMM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 2023 â Sep 2024",
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "short", year => "numeric" },
pattern => "MMM yâââMMM y",
skeleton => "yMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10 â 11, 2024",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM dâââd, y",
skeleton => "yMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Aug 10 â Sep 10, 2024",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM dâââMMM d, y",
skeleton => "yMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10, 2023 â Sep 10, 2024",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM d, yâââMMM d, y",
skeleton => "yMMMd",
},
# NOTE: Test #70
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, Sep 10 â Wed, Sep 11, 2024",
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sat, Aug 10 â Tue, Sep 10, 2024",
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sun, Sep 10, 2023 â Tue, Sep 10, 2024",
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, yâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "June â September 2024",
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "long", year => "numeric" },
pattern => "MMMMâââMMMM y",
skeleton => "yMMMM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "September 2023 â September 2024",
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "long", year => "numeric" },
pattern => "MMMM yâââMMMM y",
skeleton => "yMMMM",
},
];
my $failed = [];
for( my $i = 0; $i < scalar( @$tests ); $i++ )
{
if( defined( $TEST_ID ) )
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "startRange", type => "hour", value => 9 },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "dayPeriod", value => "in the morning" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 4 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "dayPeriod", value => "in the afternoon" },
],
greatest_diff => "B",
locale => "en",
options => { calendar => "gregorian", dayPeriod => "short", hour => "numeric" },
pattern => "h Bâââh B",
skeleton => "Bh",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 11, minute => 0, month => 9, second => 0, year => 2024 },
expects => "10 â 11 in the morning",
expects_parts => [
{ source => "startRange", type => "hour", value => 10 },
{ source => "startRange", type => "literal", value => "â" },
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 11 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "dayPeriod", value => "in the morning" },
],
greatest_diff => "h",
locale => "en",
options => { calendar => "gregorian", dayPeriod => "short", hour => "numeric" },
pattern => "hâââh B",
skeleton => "Bh",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 16, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9:30 in the morning â 4:30 in the afternoon",
expects_parts => [
{ source => "startRange", type => "hour", value => 9 },
{ source => "startRange", type => "literal", value => ":" },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 4 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "dayPeriod", value => "in the afternoon" },
],
greatest_diff => "B",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mm Bâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 11, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 11 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "dayPeriod", value => "in the morning" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mmâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "dayPeriod", value => "in the morning" },
],
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
dayPeriod => "short",
hour => "numeric",
minute => "numeric",
},
pattern => "h:mmâââh:mm B",
skeleton => "Bhm",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "10 â 11",
expects_parts => [
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "day", value => 11 },
],
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric" },
pattern => "dâââd",
skeleton => "d",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "-2024 BC â 2024 AD",
expects_parts => [
{ source => "startRange", type => "year", value => -2024 },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "era", value => "BC" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => { calendar => "gregorian", era => "short", year => "numeric" },
pattern => "y Gââây G",
skeleton => "Gy",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "2023 â 2024 AD",
expects_parts => [
{ source => "startRange", type => "year", value => 2023 },
{ source => "startRange", type => "literal", value => "â" },
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", era => "short", year => "numeric" },
pattern => "yââây G",
skeleton => "Gy",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => -2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
expects => "8/-2024 BC â 8/2024 AD",
expects_parts => [
{ source => "startRange", type => "month", value => 8 },
{ source => "startRange", type => "literal", value => "/" },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 8 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/y GâââM/y G",
skeleton => "GyM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => 8 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/yâââM/y G",
skeleton => "GyM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/yâââM/y G",
skeleton => "GyM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/y GâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y G",
skeleton => "GyMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/y GâââE, M/d/y G",
skeleton => "GyMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y G",
skeleton => "GyMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => "Aug" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM y GâââMMM y G",
skeleton => "GyMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => "Aug" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMMâââMMM y G",
skeleton => "GyMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM yâââMMM y G",
skeleton => "GyMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM dâââd, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => -2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM d, y GâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM dâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
year => "numeric",
},
pattern => "MMM d, yâââMMM d, y G",
skeleton => "GyMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "G",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, y GâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "era", value => "AD" },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
era => "short",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, yâââE, MMM d, y G",
skeleton => "GyMMMEd",
},
{
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "startRange", type => "hour", value => 10 },
{ source => "startRange", type => "literal", value => "â¯" },
{ source => "startRange", type => "dayPeriod", value => "AM" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 1 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "PM" },
],
greatest_diff => "a",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h12" },
pattern => "hâ¯aâââhâ¯a",
skeleton => "h",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9 â 10 AM",
expects_parts => [
{ source => "startRange", type => "hour", value => 9 },
{ source => "startRange", type => "literal", value => "â" },
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
],
greatest_diff => "h",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h12" },
pattern => "hâââhâ¯a",
skeleton => "h",
},
{
date1 => { day => 10, hour => 13, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 14, minute => 0, month => 9, second => 0, year => 2024 },
expects => "13 â 14",
expects_parts => [
{ source => "startRange", type => "hour", value => 13 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 14 },
],
greatest_diff => "H",
locale => "en",
options => { calendar => "gregorian", hour => "numeric", hourCycle => "h24" },
pattern => "HHâââHH",
skeleton => "H",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
expects => "9:30 â 10:30 AM",
expects_parts => [
{ source => "startRange", type => "hour", value => 9 },
{ source => "startRange", type => "literal", value => ":" },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâ¯aâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => "00" },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
],
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
},
pattern => "h:mmâââh:mmâ¯a",
skeleton => "hm",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "startRange", type => "literal", value => ":" },
{ source => "startRange", type => "minute", value => "00" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => "00" },
],
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
},
pattern => "HH:mmâââHH:mm",
skeleton => "Hm",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "startRange", type => "literal", value => ":" },
{ source => "startRange", type => "minute", value => "00" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
],
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
},
pattern => "HH:mmâââHH:mm",
skeleton => "Hm",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâ¯aâââh:mmâ¯a v",
skeleton => "hmv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => "00" },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâââh:mmâ¯a v",
skeleton => "hmv",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
minute => "numeric",
timeZoneName => "short",
},
pattern => "h:mmâââh:mmâ¯a v",
skeleton => "hmv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => ":" },
{ source => "endRange", type => "minute", value => "00" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
timeZoneName => "short",
},
pattern => "HH:mmâââHH:mm v",
skeleton => "Hmv",
},
{
date1 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "" },
{ source => "endRange", type => "minute", value => 30 },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "m",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
minute => "numeric",
timeZoneName => "short",
},
pattern => "HH:mmâââHH:mm v",
skeleton => "Hmv",
},
{
date1 => { day => 10, hour => 9, minute => 30, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
timeZoneName => "short",
},
pattern => "hâ¯aâââhâ¯a v",
skeleton => "hv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => "â¯" },
{ source => "endRange", type => "dayPeriod", value => "AM" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "h",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h12",
timeZoneName => "short",
},
pattern => "hâââhâ¯a v",
skeleton => "hv",
},
{
date1 => { day => 10, hour => 9, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 10, hour => 10, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "" },
{ source => "endRange", type => "hour", value => 10 },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "literal", value => "â" },
{ source => "endRange", type => "timeZoneName", value => "UTC Time" },
],
greatest_diff => "H",
locale => "en",
options => {
calendar => "gregorian",
hour => "numeric",
hourCycle => "h24",
timeZoneName => "short",
},
pattern => "HHâââHH v",
skeleton => "Hv",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
expects => "6 â 7",
expects_parts => [
{ source => "startRange", type => "month", value => 6 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 7 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "numeric" },
pattern => "MâââM",
skeleton => "M",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10 â 9/11",
expects_parts => [
{ source => "startRange", type => "month", value => 9 },
{ source => "startRange", type => "literal", value => "/" },
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
],
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "numeric" },
pattern => "M/dâââM/d",
skeleton => "Md",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "8/10 â 9/10",
expects_parts => [
{ source => "startRange", type => "month", value => 8 },
{ source => "startRange", type => "literal", value => "/" },
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "numeric" },
pattern => "M/dâââM/d",
skeleton => "Md",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, 9/10 â Wed, 9/11",
expects_parts => [
{ source => "startRange", type => "weekday", value => "Tue" },
{ source => "startRange", type => "literal", value => "," },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "weekday", value => "Wed" },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
},
pattern => "E, M/dâââE, M/d",
skeleton => "MEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "weekday", value => "Tue" },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
},
pattern => "E, M/dâââE, M/d",
skeleton => "MEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 7, second => 0, year => 2024 },
expects => "Jun â Jul",
expects_parts => [
{ source => "startRange", type => "month", value => "Jun" },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => "Jul" },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "short" },
pattern => "MMMâââMMM",
skeleton => "MMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10 â 11",
expects_parts => [
{ source => "startRange", type => "month", value => "Sep" },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "day", value => 11 },
],
greatest_diff => "d",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "short" },
pattern => "MMM dâââd",
skeleton => "MMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Aug 10 â Sep 10",
expects_parts => [
{ source => "startRange", type => "month", value => "Aug" },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", day => "numeric", month => "short" },
pattern => "MMM dâââMMM d",
skeleton => "MMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Tue, Sep 10 â Wed, Sep 11",
expects_parts => [
{ source => "startRange", type => "weekday", value => "Tue" },
{ source => "startRange", type => "literal", value => "," },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "weekday", value => "Wed" },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 11 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
},
pattern => "E, MMM dâââE, MMM d",
skeleton => "MMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "weekday", value => "Tue" },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
},
pattern => "E, MMM dâââE, MMM d",
skeleton => "MMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "2023 â 2024",
expects_parts => [
{ source => "startRange", type => "year", value => 2023 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", year => "numeric" },
pattern => "yââây",
skeleton => "y",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "6/2024 â 9/2024",
expects_parts => [
{ source => "startRange", type => "month", value => 6 },
{ source => "startRange", type => "literal", value => "/" },
{ source => "startRange", type => "year", value => 2024 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "numeric", year => "numeric" },
pattern => "M/yâââM/y",
skeleton => "yM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/2023 â 9/2024",
expects_parts => [
{ source => "startRange", type => "month", value => 9 },
{ source => "startRange", type => "literal", value => "/" },
{ source => "startRange", type => "year", value => 2023 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "numeric", year => "numeric" },
pattern => "M/yâââM/y",
skeleton => "yM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "9/10/2024 â 9/11/2024",
expects_parts => [
{ source => "startRange", type => "month", value => 9 },
{ source => "startRange", type => "literal", value => "/" },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
year => "numeric",
},
pattern => "M/d/yâââM/d/y",
skeleton => "yMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "month", value => 9 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "/" },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "numeric",
weekday => "short",
year => "numeric",
},
pattern => "E, M/d/yâââE, M/d/y",
skeleton => "yMEd",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
expects_parts => [
{ source => "startRange", type => "month", value => "Jun" },
{ source => "startRange", type => "literal", value => "â" },
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "short", year => "numeric" },
pattern => "MMMâââMMM y",
skeleton => "yMMM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 2023 â Sep 2024",
expects_parts => [
{ source => "startRange", type => "month", value => "Sep" },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "year", value => 2023 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "short", year => "numeric" },
pattern => "MMM yâââMMM y",
skeleton => "yMMM",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "Sep 10 â 11, 2024",
expects_parts => [
{ source => "startRange", type => "month", value => "Sep" },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "day", value => 10 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM dâââd, y",
skeleton => "yMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM dâââMMM d, y",
skeleton => "yMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
year => "numeric",
},
pattern => "MMM d, yâââMMM d, y",
skeleton => "yMMMd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
date2 => { day => 11, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 11 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "d",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 8, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM dâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 10, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
t/011_format_range_to_parts.t view on Meta::CPAN
{ source => "endRange", type => "month", value => "Sep" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "day", value => 10 },
{ source => "endRange", type => "literal", value => "," },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => {
calendar => "gregorian",
day => "numeric",
month => "short",
weekday => "short",
year => "numeric",
},
pattern => "E, MMM d, yâââE, MMM d, y",
skeleton => "yMMMEd",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 6, second => 0, year => 2024 },
t/011_format_range_to_parts.t view on Meta::CPAN
expects_parts => [
{ source => "startRange", type => "month", value => "June" },
{ source => "startRange", type => "literal", value => "â" },
{ source => "shared", type => "literal", value => "ââ" },
{ source => "endRange", type => "month", value => "September" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "M",
locale => "en",
options => { calendar => "gregorian", month => "long", year => "numeric" },
pattern => "MMMMâââMMMM y",
skeleton => "yMMMM",
},
{
date1 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2023 },
date2 => { day => 1, hour => 0, minute => 0, month => 9, second => 0, year => 2024 },
expects => "September 2023 â September 2024",
expects_parts => [
{ source => "startRange", type => "month", value => "September" },
{ source => "startRange", type => "literal", value => " " },
{ source => "startRange", type => "year", value => 2023 },
{ source => "shared", type => "literal", value => "âââ" },
{ source => "endRange", type => "month", value => "September" },
{ source => "endRange", type => "literal", value => " " },
{ source => "endRange", type => "year", value => 2024 },
],
greatest_diff => "y",
locale => "en",
options => { calendar => "gregorian", month => "long", year => "numeric" },
pattern => "MMMM yâââMMMM y",
skeleton => "yMMMM",
},
];
my $failed = [];
for( my $i = 0; $i < scalar( @$tests ); $i++ )
{
if( defined( $TEST_ID ) )
{