Учитывая объект Perl DateTime, как мне вывести 1-е, 2-е, 3-е, 4-е число месяца

Я не могу найти модуль DateTime::Format::, который правильно выводит день месяца. например Используя DateTime->strftime вместо вывода «19 июля», я хочу вывести «19 июля».

DateTime::Format::Natural::Lang: :EN парсит такие даты, но мне нужно обратное - средство форматирования вывода.

Я не хочу использовать Date::Calc или любой другой модуль даты (но рассмотрю модули без даты), и я не хочу писать его сам.

Для справки: документы DateTime, где шаблоны strftime не включают "1-й, 2-й, 3-й, 4-й" и т. д.


person Will Sheppard    schedule 19.06.2014    source источник
comment
Я вспомнил, что это называется порядковым номером, и в этом другой ответ. Я все еще хотел бы, чтобы модуль формата DateTime достиг этого.   -  person Will Sheppard    schedule 19.06.2014
comment
p3rl.org/Lingua::EN::Numbers::Ordinate   -  person choroba    schedule 19.06.2014


Ответы (1)


Возможно, вы могли бы написать какой-нибудь пользовательский форматтер (а затем выпустить его на CPAN!) Это поможет вам в этом...

package DateTime::Ordinated;

use strict;
use warnings;

use base 'DateTime';
use Lingua::EN::Numbers::Ordinate;

sub day {
  my $self = shift;

  my $day = $self->SUPER::day;

  return ordinate($day);
}

1;

А для тестирования...

$ perl -MDateTime::Ordinated -E'$d=DateTime::Ordinated->now;say $d->day'
19th
person Dave Cross    schedule 19.06.2014