Advertisement
Guest User

Untitled

a guest
May 21st, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement