Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
57 / 57 |
| DateFormatter | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
30 | |
100.00% |
57 / 57 |
| ymd_dateTime | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
| ymd_date | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
| short_dateTime | |
100.00% |
1 / 1 |
4 | |
100.00% |
6 / 6 |
|||
| short_date | |
100.00% |
1 / 1 |
4 | |
100.00% |
6 / 6 |
|||
| dateFormat | |
100.00% |
1 / 1 |
7 | |
100.00% |
15 / 15 |
|||
| formatter | |
100.00% |
1 / 1 |
7 | |
100.00% |
20 / 20 |
|||
| <?php | |
| namespace ia\Date; | |
| /** | |
| * DateFormatter | |
| * | |
| * Formats dates with days and month names with the same options as php Date or DateTime->formatter | |
| * | |
| * @version 1.0.2 | |
| * @author | |
| * @copyright | |
| */ | |
| class DateFormatter { | |
| /** @var array $names array of short and long day and month names indexed by php date format letter */ | |
| protected static $names = [ | |
| // 'D3' => ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'], | |
| // 'D2' => ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], | |
| 'D' => ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], | |
| 'l' => ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], | |
| 'F' => ['', 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'], | |
| 'M' => ['', 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], | |
| ]; | |
| /* | |
| public static function setShortDay($array) {self::$names['D']=$array;} | |
| public static function setLongDay($array) {self::$names['l']=$array;} | |
| public static function setShortMonth($array) {self::$names['M']=$array;} | |
| public static function setLongMonth($array) {self::$names['F']=$array;} | |
| public static function set_names($array) { | |
| self::$names = $array; | |
| } | |
| public static function set_spanish() { | |
| self::$names = [ | |
| // 'D3' => ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'], | |
| // 'D2' => ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], | |
| 'D' => ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], | |
| 'l' => ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], | |
| 'F' => ['', 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'], | |
| 'M' => ['', 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], | |
| ]; | |
| } | |
| public static function set_english() { | |
| self::$names = [ | |
| // 'D3' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], | |
| // 'D2' => ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], | |
| 'D' => ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], | |
| 'l' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | |
| 'F' => ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'Septiember', 'Octuber', 'Noviember', 'Dicember'], | |
| 'M' => ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | |
| ]; | |
| } | |
| */ | |
| /** | |
| * format a date as Y-m-d H:i:s eg: 2019-01-31 03:06:05 | |
| * | |
| * @param mixed $anyDate A timestamp or DateTime or parsable by strtotime Default now, ie: time() | |
| * @return string The formatted date | |
| */ | |
| public static function ymd_dateTime($anyDate = null) { | |
| // @codeCoverageIgnoreStart | |
| if($anyDate === null) { | |
| return date('Y-m-d H:i:s'); | |
| } | |
| // @codeCoverageIgnoreEnd | |
| if(is_numeric($anyDate)) { | |
| return date('Y-m-d H:i:s',$anyDate); | |
| } | |
| if($anyDate instanceof \DateTimeInterface) { | |
| return $anyDate->format('Y-m-d H:i:s'); | |
| } | |
| return date('Y-m-d H:i:s', strtotime($anyDate)); | |
| } | |
| /** | |
| * format a date as Y-m-d eg: 2019-01-31 | |
| * | |
| * @param mixed $anyDate A timestamp or DateTime or parsable by strtotime Default now, ie: time() | |
| * @return string The formatted date | |
| */ | |
| public static function ymd_date($anyDate = null) { | |
| // @codeCoverageIgnoreStart | |
| if($anyDate === null) { | |
| return date('Y-m-d'); | |
| } | |
| // @codeCoverageIgnoreEnd | |
| if(is_numeric($anyDate)) { | |
| return date('Y-m-d',$anyDate); | |
| } | |
| if($anyDate instanceof \DateTimeInterface) { | |
| return $anyDate->format('Y-m-d'); | |
| } | |
| return date('Y-m-d', strtotime($anyDate)); | |
| } | |
| /** | |
| * format a date as d/M/Y G:i eg: 31/Ene/2019 3:14 | |
| * | |
| * @param mixed $anyDate A timestamp or DateTime or parsable by strtotime Default now, ie: time() | |
| * @return string The formatted date | |
| */ | |
| public static function short_dateTime($anyDate = null) { | |
| // @codeCoverageIgnoreStart | |
| if($anyDate === null) { | |
| return date('d').'/'.self::$names['M'][date('n')].'/'.date('Y G:i'); | |
| } | |
| // @codeCoverageIgnoreEnd | |
| if(is_numeric($anyDate)) { | |
| return date('d',$anyDate).'/'.self::$names['M'][date('n',$anyDate)].'/'.date('Y G:i',$anyDate); | |
| } | |
| if($anyDate instanceof \DateTimeInterface) { | |
| return $anyDate->format('d').'/'.self::$names['M'][$anyDate->format('n')].'/'.$anyDate->format('Y G:i'); | |
| } | |
| $anyDate = strtotime($anyDate); | |
| return date('d', $anyDate).'/'.self::$names['M'][date('n',$anyDate)].'/'.date('Y G:i',$anyDate); | |
| } | |
| /** | |
| * format a date as d/M/Y eg: 31/Ene/2019 | |
| * | |
| * @param mixed $anyDate A timestamp or DateTime or parsable by strtotime Default now, ie: time() | |
| * @return string The formatted date | |
| */ | |
| public static function short_date($anyDate = null) { | |
| // @codeCoverageIgnoreStart | |
| if($anyDate === null) { | |
| return date('d/').self::$names['M'][date('n')].date('/Y'); | |
| } | |
| // @codeCoverageIgnoreEnd | |
| if(is_numeric($anyDate)) { | |
| return date('d',$anyDate).'/'.self::$names['M'][date('n',$anyDate)].'/'.date('Y',$anyDate); | |
| } | |
| if($anyDate instanceof \DateTimeInterface) { | |
| return $anyDate->format('d').'/'.self::$names['M'][$anyDate->format('n')].'/'.$anyDate->format('Y'); | |
| } | |
| $anyDate = strtotime($anyDate); | |
| return date('d', $anyDate).'/'.self::$names['M'][date('n',$anyDate)].'/'.date('Y',$anyDate); | |
| } | |
| /** | |
| * Format a date with local names for days and months with the same format string as php date & DateTime->format | |
| * | |
| * @param string $format The format string as per php date and DateTime->format, default 'd/M/Y' | |
| * @param mixed $anyDate A timestamp or DateTime or parsable by strtotime Default now, ie: time() | |
| * @return string The formatted date | |
| */ | |
| public static function dateFormat($format = 'd/M/Y', $anyDate = null) { | |
| // @codeCoverageIgnoreStart | |
| if($anyDate === null) { | |
| $anyDate = time(); | |
| } | |
| // @codeCoverageIgnoreEnd | |
| if($anyDate instanceof \DateTimeInterface) { | |
| $values = ['w' => $anyDate->format('w'),'n' => $anyDate->format('n')]; | |
| for($i=0,$len=strlen($format); $i<$len; ++$i) { | |
| $values[$format[$i]] = $anyDate->format($format[$i]); | |
| } | |
| return self::formatter($format, $values); | |
| } | |
| if(is_numeric($anyDate)) { | |
| $values = ['w'=>date('w', $anyDate),'n'=>date('n', $anyDate)]; | |
| for($i=0,$len=strlen($format); $i<$len; ++$i) { | |
| $values[$format[$i]] = date($format[$i], $anyDate); | |
| } | |
| return self::formatter($format, $values); | |
| } | |
| $anyDate = strtotime($anyDate); | |
| $values = ['w'=>date('w', $anyDate),'n'=>date('n', $anyDate)]; | |
| for($i=0,$len=strlen($format); $i<$len; ++$i) { | |
| $values[$format[$i]] = date($format[$i], $anyDate); | |
| } | |
| return self::formatter($format, $values); | |
| } | |
| /** | |
| * Creates the formated date time string from the received date values | |
| * | |
| * @param string $format The format string as per php date and DateTime->format | |
| * @param array $dateTimeValues | |
| * @return string The formatted date | |
| */ | |
| protected static function formatter($format, $dateTimeValues) { | |
| /** @var array $namesIndex php date format letter */ | |
| $namesIndex = [ | |
| 'D' => 'w', | |
| 'l' => 'w', | |
| 'F' => 'n', | |
| 'M' => 'n', | |
| ]; | |
| $ret = ''; | |
| $len = strlen($format); | |
| $i = 0; | |
| while($i < $len) { | |
| $c = $format[$i++]; | |
| if(array_key_exists($c, $namesIndex)) { | |
| $ret .= self::$names[$c][$dateTimeValues[$namesIndex[$c]] ]; | |
| continue; | |
| } | |
| switch( $c ) { | |
| case '\\': | |
| if($i < $len) { | |
| $ret .= $format[$i++]; | |
| } | |
| break; | |
| case 'S': | |
| $ret .= '°'; | |
| break; | |
| default: | |
| if(array_key_exists($c, $dateTimeValues)) { | |
| $ret .= $dateTimeValues[$c]; | |
| } | |
| // @codeCoverageIgnoreStart | |
| else { | |
| $ret .= $c; | |
| } | |
| // @codeCoverageIgnoreEnd | |
| } | |
| } | |
| return $ret; | |
| } | |
| } |