Advertisement
Architecte

DateFr

Apr 2nd, 2012
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.26 KB | None | 0 0
  1. <?php
  2. /*
  3.  * Convertit toutes les dates en FR en utilisant la fonction date de PHP
  4.  * Examples :
  5.  *    - DateFr::date('F j, Y, g:i a');
  6.  *    - DateFr::date('\C\\\'\e\s\t \l\e jS \j\o\u\r.');
  7.  *    - DateFr::date('DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000)');
  8.  *    - DateFr::date(DateFr::DATE_FR_FULL);
  9.  */
  10. class DateFr {
  11.  
  12.   const DATE_FR_FULL = '\L\e l d F Y';
  13.   const DATE_FR_SHORT = '\L\e D d M Y';
  14.   const TIME_FR = '\à H \h i';
  15.  
  16.   public static $mon_full_names = array(
  17.           '', 'Janvier', 'Février', 'Mars', 'Avril',
  18.           'Mai', 'Juin', 'Juillet', 'Août',
  19.           'Septembre', 'Octobre', 'Novembre', 'Decembre'
  20.   );
  21.   public static $mon_short_names = array(
  22.           '', 'Jan', 'Fev', 'Mar', 'Avr', 'Mai',
  23.           'Juin', 'Juil', 'Aoû', 'Sep', 'Oct',
  24.           'Nov', 'Dec'
  25.   );
  26.   public static $day_full_names = array(
  27.           '', 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'
  28.   );
  29.   public static $day_short_names = array(
  30.           '', 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
  31.   );
  32.  
  33.   public static function french_suffix($number)
  34.   {
  35.     if ($number == 1) {
  36.       return 'er';
  37.     }
  38.  
  39.     return 'ème';
  40.   }
  41.  
  42.   public static function is_ascii($str)
  43.   {
  44.     return ! preg_match('/[^\x00-\x7F]/S', $str);
  45.   }
  46.    
  47.   public static function strlen($str)
  48.   {
  49.     if (self::is_ascii($str)) {
  50.       return strlen($str);
  51.     }
  52.  
  53.     return strlen(utf8_encode($str));
  54.   }
  55.  
  56.   public static function date_addslashes($str) {
  57.     $str_len = self::strlen($str);
  58.     $str_str = '';
  59.  
  60.     for ($i = 0; $i < $str_len; $i++) {
  61.       $str_str .= '\\'.$str[$i];
  62.     }
  63.    
  64.     return $str_str;
  65.   }
  66.  
  67.   public static function date_rfc2822($timestamp) {
  68.     return self::date_addslashes(self::$day_short_names[date('n', $timestamp)]).'\, d '.self::date_addslashes(self::$mon_short_names[date('n', $timestamp)]).' Y H:i:s O';
  69.   }
  70.  
  71.   static public function date($format, $timestamp = null)
  72.   {
  73.     if (!$timestamp) {
  74.       $timestamp = time();
  75.     }
  76.     $format_str = '';
  77.     $format_len = self::strlen($format);
  78.  
  79.     for ($i = 0; $i < $format_len; $i++) {
  80.       switch ($format[$i]) {
  81.         case 'D': $format_str .= self::date_addslashes(self::$day_short_names[date('j', $timestamp)]); break;
  82.         case 'l': $format_str .= self::date_addslashes(self::$day_full_names[date('j', $timestamp)]); break;
  83.         case 'S': $format_str .= self::date_addslashes(self::french_suffix(date('j', $timestamp))); break;
  84.         case 'F': $format_str .= self::date_addslashes(self::$mon_full_names[date('n', $timestamp)]); break;
  85.         case 'M': $format_str .= self::date_addslashes(self::$mon_short_names[date('n', $timestamp)]); break;
  86.         case 'r': $format_str .= self::date_rfc2822($timestamp); break;
  87.         case '\\': if ($i < $format_len) {
  88.                       $i++;
  89.                       $format_str .= $format[$i-1];
  90.                       // Fix problem UTF-8 encode
  91.                       if (!self::is_ascii($format[$i]) && $i < $format_len) {
  92.                         $i++;
  93.                         $format_str .= $format[$i-1];
  94.                       }
  95.                    };
  96.         default: $format_str .= $format[$i]; break;
  97.     }
  98.     }
  99.     return date($format_str, $timestamp);
  100.   }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement