SHARE
TWEET

Untitled

a guest May 21st, 2019 67 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /**
  4.  * IndonesiaDateTime.
  5.  *
  6.  * Extends Class DateTime agar memberikan format penamaan hari dan bulan dalam bahasa Indonesia.
  7.  *
  8.  * @author: IjorTengab
  9.  * @last_update: 2019 05 11
  10.  *
  11.  * Latar Belakang:
  12.  * Berawal dari builtin PHP Class `DateTime` yang ~tidak bisa~ susah untuk
  13.  * di-extends agar dapat di-override method `format`, maka Class ini menjadi
  14.  * alternative solusi.
  15.  *
  16.  * Cara Penggunaan:
  17.  * Penggunaan class ini sama persis seperti menggunakan Class `DateTime`.
  18.  * Hanya jika ingin menggunakan comparison, maka gunakan method `get`.
  19.  *
  20.  * Contoh 1, Print Format:
  21.  * ```
  22.  * $a = new DateTime;
  23.  * $x = new IndonesiaDateTime;
  24.  * echo $a->format('l'); // return Saturday
  25.  * echo $x->format('l'); // return Sabtu
  26.  * ```
  27.  *
  28.  * Contoh 2, Comparison:
  29.  * ```
  30.  * $a = new DateTime('yesterday');
  31.  * $b = new DateTime('tomorrow');
  32.  * var_dump($a < $b); // return true
  33.  *
  34.  * $x = new IndonesiaDateTime('yesterday');
  35.  * $y = new IndonesiaDateTime('tomorrow');
  36.  * var_dump($x->get() < $y->get()); // return true
  37.  *
  38.  * $a = new DateTime('yesterday');
  39.  * $x = new IndonesiaDateTime('tomorrow');
  40.  * var_dump($a < $x->get()); // return true
  41.  * ```
  42.  *
  43.  * Contoh 3, Minggu dan Ahad:
  44.  * ```
  45.  * $x = new IndonesiaDateTime('this Sunday');
  46.  * echo $x->format('l'); // Minggu
  47.  * $x->ahadSwitch(true);
  48.  * echo $x->format('l'); // Ahad
  49.  * $x->ahadSwitch(false);
  50.  * echo $x->format('l'); // Minggu
  51.  *
  52.  * $y = new IndonesiaDateTime('this Sunday');
  53.  * echo $y->format('D'); // Min
  54.  * $y->ahadSwitch(true);
  55.  * echo $y->format('D'); // Aha
  56.  * $y->ahadSwitch(false);
  57.  * echo $y->format('D'); // Min
  58.  * ```
  59.  */
  60. class IndonesiaDateTime
  61. {
  62.  
  63.     /**
  64.      * Property sebagai penanda menggunakan diksi Ahad alih-alih Minggu.
  65.      */
  66.     protected $ahad_switch = false;
  67.  
  68.     /**
  69.      * Property penyimpanan Object DateTime.
  70.      */
  71.     protected $date;
  72.  
  73.     /**
  74.      * Convert format dengan menutupi tiap placeholder dengan kurung kotak.
  75.      * Berguna untuk mencegah salah translate antara Mon dan Monday yang
  76.      * mengandung substring `Mon`.
  77.      */
  78.     protected $converter = [
  79.         'D' => '[D]',
  80.         'l' => '[l]',
  81.         'F' => '[F]',
  82.         'M' => '[M]',
  83.     ];
  84.  
  85.     /**
  86.      * Translate kata.
  87.      */
  88.     protected $replacement = [
  89.         '[Sun]' => 'Min',
  90.         '[Mon]' => 'Sen',
  91.         '[Tue]' => 'Sel',
  92.         '[Wed]' => 'Rab',
  93.         '[Thu]' => 'Kam',
  94.         '[Fri]' => 'Jum',
  95.         '[Sat]' => 'Sab',
  96.         '[Sunday]' => 'Minggu',
  97.         '[Monday]' => 'Senin',
  98.         '[Tuesday]' => 'Selasa',
  99.         '[Wednesday]' => 'Rabu',
  100.         '[Thursday]' => 'Kamis',
  101.         '[Friday]' => 'Jumat',
  102.         '[Saturday]' => 'Sabtu',
  103.         '[Jan]' => 'Jan',
  104.         '[Feb]' => 'Feb',
  105.         '[Mar]' => 'Mar',
  106.         '[Apr]' => 'Apr',
  107.         '[May]' => 'Mei',
  108.         '[Jun]' => 'Jun',
  109.         '[Jul]' => 'Jul',
  110.         '[Aug]' => 'Agu',
  111.         '[Sep]' => 'Sep',
  112.         '[Oct]' => 'Okt',
  113.         '[Nov]' => 'Nov',
  114.         '[Dec]' => 'Des',
  115.         '[January]' => 'Januari',
  116.         '[February]' => 'Februari',
  117.         '[March]' => 'Maret',
  118.         '[April]' => 'April',
  119.         '[May]' => 'Mei',
  120.         '[June]' => 'Juni',
  121.         '[July]' => 'Juli',
  122.         '[August]' => 'Agustus',
  123.         '[September]' => 'September',
  124.         '[October]' => 'Oktober',
  125.         '[November]' => 'November',
  126.         '[December]' => 'Desember',
  127.     ];
  128.  
  129.     /**
  130.      * Mengembalikan object DateTime, berguna untuk comparison.
  131.      */
  132.     public function get()
  133.     {
  134.         return $this->date;
  135.     }
  136.  
  137.     /**
  138.      * Fungsi untuk turn on/off pemilihan format Ahad alih-alih Minggu.
  139.      */
  140.     public function ahadSwitch($boolean)
  141.     {
  142.         return $this->ahad_switch = $boolean;
  143.     }
  144.  
  145.     /**
  146.      * Construct.
  147.      */
  148.     public function __construct()
  149.     {
  150.         $args = func_get_args();
  151.         if (count($args) == 1 && $args[0] instanceOf \DateTime) {
  152.             $this->date = $args[0];
  153.         }
  154.         else {
  155.             isset($args[0]) or $args[0] = 'now';
  156.             isset($args[1]) or $args[1] = null;
  157.             $this->date = new \DateTime($args[0], $args[1]);
  158.         }
  159.         return $this;
  160.     }
  161.  
  162.     /**
  163.      * Magic untuk semua fungsi static DateTime.
  164.      */
  165.     public static function __callStatic($name, $arguments)
  166.     {
  167.         $date = call_user_func_array(['\DateTime', $name], $arguments);
  168.         return new static($date);
  169.     }
  170.  
  171.     /**
  172.      * Magic untuk semua fungsi instance DateTime.
  173.      */
  174.     public function __call($name, $arguments)
  175.     {
  176.         $test = call_user_func_array([$this->date, $name], $arguments);
  177.         if ($test instanceOf \DateTime) {
  178.             $this->date = $test;
  179.             return $this;
  180.         }
  181.         else {
  182.             return $test;
  183.         }
  184.     }
  185.  
  186.     /**
  187.      * Sama seperti DateTime::format. Disini akan di-translate kata dalam bahasa
  188.      * English ke Indonesia.
  189.      */
  190.     public function format($format)
  191.     {
  192.         $format = strtr($format, $this->converter);
  193.         $result = $this->date->format($format);
  194.         $replacement = $this->replacement;
  195.         if ($this->ahad_switch) {
  196.             $replacement['[Sun]'] = 'Aha';
  197.             $replacement['[Sunday]'] = 'Ahad';
  198.         }
  199.         return strtr($result, $replacement);
  200.     }
  201. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top