Helpers – Converts – Conversiones de datos
Librería donde el propósito es convertir datos en diferentes formatos, tipos u otros parámetros.
/** * HelperConvert.php * @author Code Develium */ namespace Helpers; use DateTimeZone; use Exception; /** * Class HelperConvert */ abstract class HelpConvert { /** * Transforma un string SI/NO-YES/NO-Y/S-S/N-1/0 a bool. * Si el valor está vacío o null, devuelve null. * Devuelve null si no se puede convertir a true o false. * * @param string $str_bool * * @return bool */ public static function toBool($str_bool) { $ret = -1; if (HelpValidate::isEmpty($str_bool)) { $ret = null; } else { if (is_string($str_bool)) { $name = strtolower(strtr($str_bool, 'ÍÓíó', 'ioio')); $sn = preg_replace( '/^[:alnum:]/ui', '', strtoupper(trim($name))); if ( $sn == 'S' || $sn == 'Y' || $sn == 'SI' || $sn == 'YES' || $sn == '1') { $ret = true; } else { if ($sn == 'N' || $sn == 'NO' || $sn == '0') { $ret = false; } else { $ret = null; } } } else { if (is_numeric($str_bool)) { if ($str_bool === 1) { $ret = true; } else { if ($str_bool === 0) { $ret = false; } else { $ret = null; } } } else { if (is_bool($str_bool)) { return $str_bool; } } } } return $ret; } /** * Convierte un valor a un array. * Siempre devuelve un array. * * @param $element * * @return array */ public static function toArray($element): array { if (is_array($element)) { return $element; } elseif (HelpValidate::isEmpty($element)) { // No aseguramos que no tenga valor return []; } elseif (is_object($element)) { return ( array )$element; } else { return array($element); } } /** * Devuelve un texto sin especiales HTML y sustitutyendo los CRLF * por <br /> * Si es blanco o null devuelve ' ' * * @param $txt * * @return string */ public static function toHtml($txt) { if (HelpValidate::isEmpty($txt)) { return ' '; } return nl2br(htmlspecialchars($txt)); } /** * Devuelve un valor en formato monetario +/- 1.234,00 €. * Si el valor esta vació, devuelve null. * * @param string|int $value * @param bool $simbol * * @return string */ public static function toCurrencyEuro($value, $simbol = true) { if (HelpValidate::isEmpty($value)) { return null; } $f = floatval($value); $sSimbol = $simbol ? ' €' : ''; if (empty($f)) { return '0,00'.$sSimbol; } if ($f >= 0) { $sSigno = ''; } else { $f *= (-1); $sSigno = '-'; } $t = number_format($f, 2, ',', '.'); return $sSigno.$t.$sSimbol; } /** * Convierte una TimStamp en una fecha. * Formato fecha: yyyy-mm-dd * * @param int $timestamp * * @return string */ public static function timeStamp2Date($timestamp) { $date_str = getdate($timestamp); $year = $date_str[ "year" ]; $mon = $date_str[ "mon" ]; $day = $date_str[ "mday" ]; return sprintf("%4d-%02d-%02d", $year, $mon, $day); } /** * Convierte un timestamp en una fecha y hora * Fomato fecha: yyyy-mm-dd hh:mm:ss * * @param int $timestamp * * @return string */ public static function timeStamp2DateTime($timestamp) { $date_str = getdate($timestamp); $year = $date_str[ "year" ]; $mon = $date_str[ "mon" ]; $mday = $date_str[ "mday" ]; $h = $date_str[ "hours" ]; $m = $date_str[ "minutes" ]; $s = $date_str[ "seconds" ]; return sprintf( "%4d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday, $h, $m, $s); } /** * Convierte una hora, minutos y segundo en segundos * * @param $time * * @return int */ public static function toSecs($time) { if (HelpValidate::isTime($time)) { $arrTime = explode(":", $time); settype($arrTime[ 0 ], "integer"); settype($arrTime[ 1 ], "integer"); settype($arrTime[ 2 ], "integer"); $seconds = ($arrTime[ 0 ] * pow(60, 2)); $seconds += (($arrTime[ 1 ] * 60) + $arrTime[ 2 ]); return $seconds; } else { return 0; } } /** * Convierte un string en un double. * El separador decimales en el string es la coma * Los miles no llevan punto. * * @param $txt * * @return float */ public static function string2Double($txt) { /* Cambiamos la coma decimal por el punto */ return doubleval(str_replace(',', '.', $txt)); } /** * Separa una frase a un array donde cada palabra es una posición * * @param string $str * * @return array */ public static function string2ArrayWord($str) { return preg_split('/ /', $str, -1); } /** * Trasnforma un string en un array donde cada caracter es una * posición * * @param string $str * * @return array */ public static function string2ArrayChar($str) { return preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); } /** * Devuelve un string en formato decimal de un numero. * Por defecto no muestra decimales, separador miles el punto. * Puede redondear. * * @param int|double $num * @param int $decimales * @param bool $redondear * * @return string */ public static function number2String( $num, $decimales = 0, $redondear = true) { $sSepDecimals = ''; if ($decimales != 0) { $sSepDecimals = ','; } $sSepMiles = '.'; if (empty($num)) { return '0'; } if (!$redondear) { return number_format( $num, $decimales, $sSepDecimals, $sSepMiles); } $str = number_format( $num, $decimales + 1, $sSepDecimals, $sSepMiles); return substr($str, 0, strlen($str) - 1); } /** * Devuelve un valor numérico como BYTES * * @param int $size * * @return string */ public static function number2Bytes($size) { $match = null; $suffixes = array( '' => 1, 'k' => 1024, 'm' => 1048576, /* 1024 * 1024 */ 'g' => 1073741824, /* 1024 * 1024 * 1024 */ ); if (preg_match( '/([0-9]+)\s*(k|m|g)?(b?(ytes?)?)/i', $size, $match)) { return $match[ 1 ] * $suffixes[ strtolower($match[ 2 ]) ]; } return ''; } /** * Muestra el valor string 0 per un valor null, vacio o zero * * @param string $str * * @return string */ public static function empty2Zero($str) { return HelpValidate::isEmpty($str) ? '0' : $str; } /** * En lugar de mostrar el zero, null o vacío, muestra un espacio * en blanco * * @param int $val * * @return string */ public static function empty2Nbsp($val) { return HelpValidate::isEmpty($val) ? ' ' : $val; } /** * Decodifica los caracteres especiales a html * " => " * * @param $txt * * @return string */ public static function decodeEntities($txt) { return html_entity_decode($txt); } /** * Devuelve la fecha y hora (yyyy-mm-dd hh:mm:ss) partiendo de una * fecha en formato UTC * Formato UTC: 20070724T224556Z * * @param string $fechaUtc * * @return string */ public static function dateUTC2DateTime($fechaUtc) { $utcdiff = date('Z', time()); /* Diferencia UTC en segundos */ /* UTC = 20070724T224556Z */ $y = (int)substr($fechaUtc, 0, 4); $m = (int)substr($fechaUtc, 4, 2); $d = (int)substr($fechaUtc, 6, 2); $h = (int)substr($fechaUtc, 9, 2); $i = (int)substr($fechaUtc, 11, 2); $s = (int)substr($fechaUtc, 13, 2); $stamp = mktime($h, $i, $s, $m, $d, $y); $stamp += $utcdiff; return date('Y-m-d H:i:s', $stamp); } /** * Convierte una fecha y hora (GMT) en otra en función de una zona * horaria * * @param string $datetime * @param string $time_zone * * @return string * @throws Exception */ public static function dateTime2TimeZone( $datetime, $time_zone = 'Europe/Madrid') { if (HelpValidate::isEmpty($datetime)) { return ''; } if (strlen($datetime) == 16) { $datetime .= ':00'; } $offset = 0; $usuario_timezone = new DateTimeZone($time_zone); try{ $fecha = new \DateTime($datetime, $usuario_timezone); } catch (Exception $e){ throw $e; } $offset = $usuario_timezone->getOffset($fecha); return HelpDateTime::sumarMinutos($datetime, $offset); } /** * Devuevle sólo la fecha de una fecha y hora * Formato fecha: yyyy-mm-dd * * @param $fecha_hora * * @return string */ public static function dateTime2Date($fecha_hora) { if (strrpos($fecha_hora, ' ') === false) { return null; } list($dt,) = explode(' ', $fecha_hora); return $dt; } /** * Convierte una fecha Std en timestamp, 15/05/2020 => 1273874400 * Formato fecha: yyyy-mm-dd * * @param $fecha * * @return int */ public static function date2TimeStamp($fecha) { $hours = 0; $minutes = 0; $seconds = 0; list($year, $month, $day) = explode("-", $fecha); return mktime( $hours, $minutes, $seconds, $month, $day, $year); } /** * Devuelve el dia de la fecha en formato texto * (lunes, 23 de enero del 2009) * Formato fecha: yyyy-mm-dd * * @param $fecha * * @return string */ public static function date2Text($fecha) { $arrDias = array('Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sábado'); $arrMeses = array( 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre' ); list($anio, $mes, $dia) = explode('-', $fecha); $wd = date('w', mktime(0, 0, 0, $mes, $dia, $anio)); return $arrDias[ $wd ].", ".$dia." de " . $arrMeses[ $mes - 1 ]." del ".$anio; } /** * Muestra la fecha en función de un formato. * No compruba si la fecha es correcta * Formato de fecha: yyyy-mm-dd * * @param $date * @param string $formato_mostrar * * @return string */ public static function date2Format( $date, $formato_mostrar = 'dd/mm/yyyy') { if (HelpValidate::isEmpty($date)) { return ''; } /* El formato de fecha de entrada es yyyy-mm-dd */ list($y, $m, $d) = explode('-', $date); switch ($formato_mostrar) { case 'dd/mm/yyyy': return "$d/$m/$y"; case 'mm/dd/yyyy': return "$m/$d/$y"; case 'yyyy/mm/dd': return "$y/$m/$d"; case 'dd-mm-yyyy': return "$d-$m-$y"; case 'mm-dd-yyyy': return "$m-$d-$y"; case 'yyyy-mm-dd': return "$y-$m-$d"; case 'dd.mm.yyyy': return "$d.$m.$y"; case 'mm.dd.yyyy': return "$m.$d.$y"; case 'yyyy.mm.dd': return "$y.$m.$d"; default: return $date; } } /** * Devuelve un fecha y hora en formato UTC partiendo de una fecha + yyyy-mm-dd * Format utc: YYYYMMDDTHHiissZ * * @param string $fecha * * @return string */ public static function date2DateUTC($fecha) { $utcdiff = date('Z', time()); /* Diferencia UTC en segundos */ list($anio, $mes, $dia) = explode('-', $fecha); $stamp = mktime(0, 0, 0, $mes, $dia, $anio); $stamp -= $utcdiff; return date('Ymd\THi\0\0\Z', $stamp); } /** * Devuelve un datetime partiendo de una fecha yyy-mm-dd y una * hora, minutos, y segundos. * * @param string $fecha * @param int $hora * @param int $minutos * @param int $segundos * * @return string */ public static function date2DateTime( $fecha, $hora = 0, $minutos = 0, $segundos = 0) { return $fecha.' '.substr('00'.$hora, -2).':' .substr('00'.$minutos, -2).':' .substr('00'.$segundos, -2); } /** * Sustitule el tab <br> html por un \n * * @param $str * * @return string */ public static function br2nl($str) { if (empty($str)) { return $str; } preg_match_all("#<[^>]+br.+?>#i", $str, $matches); foreach ($matches[ 0 ] as $match) { $str = str_replace($match, "<br>", $str); } $brs = array('<br>', '<br/>', '<br />'); $str = str_replace("\r\n", "\n", $str); $str = str_replace("\n\r", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_ireplace($brs, "\n", $str); return $str; } /** * Devuelve el literal SI o NO en función de un valor booleano * Devuelve '' si el valor esta vacio * * @param $valor * * @return string */ public static function bool2YesNo($valor) { if ($valor === '' || is_null($valor)) { return ''; } if ($valor == true || $valor == 1) { return 'Sí'; } else { if ($valor == false || $valor == 0 || empty($valor)) { return 'No'; } else { return $valor; } } } }