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 ) )
    {