Проверьте, не отформатирован ли параметр как дата - PullRequest
0 голосов
/ 24 апреля 2020

Как я могу проверить, отформатирован ли уже параметр?

$start_date = DateTime::Format::Pg->format_date($start_date);
$end_date = DateTime::Format::Pg->format_date($end_date);

Чтобы быть более точным c, я хочу проверить, форматируются ли параметры $ start_date и $ end_date перед их форматированием, потому что если они уже отформатированы, я получаю сообщение об ошибке. Спасибо!

1 Ответ

0 голосов
/ 24 апреля 2020

Это не совсем ваш вопрос, но вот обычный фрагмент кода, который я копирую в большинство моих проектов:

=head2 format_datetime

  ->search({ date_col => { '>=' => $schema->format_datetime( $myDate ) } })

Utility method to properly format a DateTime according to the current storage
engine.  Optional second argument converts the datetime to a specific time zone
before stringifying.

=cut

sub format_datetime {
   my ($self, $datetime, $time_zone)= @_;

   # Make a datetime if it isn't already
   $datetime= DateTime::Format::Flexible->parse_datetime($datetime)
      unless ref $datetime && ref($datetime)->can('set_time_zone');

   # Force time zone
   $datetime= $datetime->clone->set_time_zone($time_zone)
      if defined $time_zone and $datetime->time_zone ne $time_zone;

   $datetime->set_time_zone('floating'); # prevent datetime formatter from changing time zone
   return $self->storage->datetime_parser->format_datetime($datetime);
}

Обратите внимание, что я использую DBIx :: Class и этот метод переходит в класс Schema. Но в любом случае, дело в том, что я проверяю, является ли значение объектом DateTime, и, если нет, я анализирую его, то я устанавливаю правильный часовой пояс (если это был уже объект DateTime с другим часовым поясом, чем тот, который должен быть сохранен в столбец), а затем я использую средство форматирования для механизма базы данных, чтобы преобразовать его обратно в строку.

Используя такой помощник, я не зависим от указанного c средства форматирования даты и могу запустить мои тесты на SQLite.

...