[Dbix-class] format DATE & TIMESTAMP columns

Octavian Râsnita orasnita at gmail.com
Sun Jul 26 10:05:41 GMT 2009


From: "Alex" <capfan at gmx.de>

> Hi all!
>
>
>
> I'm displaying a view on a web page. The view contains a timestamp and a
> date field. The database is MySQL 5.0.x.
>
>
>
> As raw values from timestamp fields are no eye candy, I decided to use
> DBIx::Class::InflateColumn::DateTime, using its default formatter to 
> format
> the timestamp. Unfortunately, it formats the date column, too. But as the
> date column has no time information, I get something like
> "YYYY-MM-DDT00:00:00". I don't want the time information.
>
>
>
> Usually, I would format the date and timestamp within the sql statement, 
> but
> I wanted to try to format it in the ResultClass. So, how do I do that?

I use to do it in the template, but I use TT which can do more than H:T:C 
using:

At the top of the template:
[% MACRO d(date) BLOCK; date.set_locale(lang).strftime('%e %b %Y');END -%]

Then in the template I just need to use

[% d(date_field) %]

which formats the date depending on the pattern I used in the d() macro at 
the top of the template.
(lang is a variable that holds the language name - 'en', 'fr'...)

You can apply this in the program too, using:

my $formatted_date = $date_field->strftime('the format you want your date to 
be');

or also specify a locale:

my $formatted_locale_date = $date_field->set_locale('ro')->strftime('the 
format you want');

Or you can apply any method from the DateTime class like:

my $localized_month_name = $date_field->set_locale('ro')->month_name;

HTH.

Octavian




More information about the DBIx-Class mailing list