1<?php 2/* Copyright (c) 2019 Nils Haagen <nils.haagen@concepts-and-training.de> Extended GPL, see docs/LICENSE */ 3 4namespace ILIAS\Data\DateFormat; 5 6/** 7 * A Date Format provides a format definition akin to PHP's date formatting options, 8 * but stores the single elements/options as array to ease conversion into other formats. 9 */ 10class DateFormat 11{ 12 const DOT = '.'; 13 const COMMA = ','; 14 const DASH = '-'; 15 const SLASH = '/'; 16 const SPACE = ' '; 17 const DAY = 'd'; 18 const DAY_ORDINAL = 'jS'; 19 const WEEKDAY = 'l'; 20 const WEEKDAY_SHORT = 'D'; 21 const WEEK = 'W'; 22 const MONTH = 'm'; 23 const MONTH_SPELLED = 'F'; 24 const MONTH_SPELLED_SHORT = 'M'; 25 const YEAR = 'Y'; 26 const YEAR_TWO_DIG = 'y'; 27 28 const TOKENS = [ 29 self::DOT, 30 self::COMMA, 31 self::DASH, 32 self::SLASH, 33 self::SPACE, 34 self::DAY, 35 self::DAY_ORDINAL, 36 self::WEEKDAY, 37 self::WEEKDAY_SHORT, 38 self::WEEK, 39 self::MONTH, 40 self::MONTH_SPELLED, 41 self::MONTH_SPELLED_SHORT, 42 self::YEAR, 43 self::YEAR_TWO_DIG 44 ]; 45 46 /** 47 * @var array 48 */ 49 protected $format = []; 50 51 public function __construct(array $format) 52 { 53 $this->validateFormatElelements($format); 54 $this->format = $format; 55 } 56 57 public function validateFormatElelements(array $format) 58 { 59 foreach ($format as $entry) { 60 if (!in_array($entry, self::TOKENS)) { 61 throw new \InvalidArgumentException("not a valid token for date-format", 1); 62 } 63 } 64 } 65 66 /** 67 * Get the elements of the format as array. 68 * @return array 69 */ 70 public function toArray() : array 71 { 72 return $this->format; 73 } 74 75 /** 76 * Get the format as string. 77 * @return array 78 */ 79 public function toString() : string 80 { 81 return implode('', $this->format); 82 } 83} 84