Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Customising the CMS /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Date formating


Go to End


1062 Views

Avatar
Pike

Community Member, 42 Posts

15 January 2010 at 4:28am

Hi to all,

Methods like .Nice, .Nice24, Format, FormatI18N is problematic for me.

Becouse e.g.:
1. %e parameter not works under OS Windows
2. I’m Czech and results from strftime() I must convert to utf8:

$MyDate = strftime( $date_formats[$date_formats_item], strtotime( $this->value ) );
if ( !$ut8encode ) return $MyDate;
return ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ? iconv("CP1250", "UTF-8", $MyDate ) : utf8_encode( $MyDate ) );

So I arbitrated for custom solution:

I’ve global variable $date_formats in mysite/_config

$locale_lang = i18n::get_lang_from_locale(i18n::get_locale());
if ( preg_match("/cs|sk|de/i", $locale_lang ) ) {
$date_formats = array(
'date_time_iso' => '%Y-%m-%d %H:%i:%s',
'date_time' => '%e.%c.%Y %H:%i:%s',
'date_hm' => '%e.%c.%Y %H:%i',
'date_named_full'=> '%W, %e. %M %Y %H:%i:%s',
'date_named' => '%W, %e. %N %Y',
'date' => '%e.%c.%Y',
'time' => '%H:%i:%s',
'hm' => '%H:%i'
);
}
else {
$date_formats = array(
'date_time_iso' => '%Y-%m-%d %H:%i:%S',
'date_time' => '%m.%d.%Y %h:%i:%s',
'date_hm' => '%m.%d.%Y %h:%i %r',
'date_named_full'=> '%W, %M %e, %Y %h:%i %r',
'date_named' => '%W, %M %e, %Y',
'date' => '%M %e, %Y',
'time' => '%h:%i:%s %r',
'hm' => '%h:%i %r'
);
}

Then I can call this method:

public function MyDateFormat( $date_formats_item, $ut8encode = true ) {
global $date_formats;

$locale_lang = i18n::get_locale();
$ls_time_names= DB::query( "SET lc_time_names='$locale_lang'");
$MyDate = DB::query( "SELECT DATE_FORMAT( '$this->value', '$date_formats[$date_formats_item]' )")->value();
return $MyDate;
}

My problem is, that I must add this method to Date class, SSDDatetime class and Time class.
My question is:
Where can I put my function MyDateFormat to be visible for all 3 classes?
Or how can I extend all 3 classes by my method MyDateFormat in the one place?
Help me, please……..