Helper DateTime.
Funciones de manipulación de fechas y horas

Code Helper

Helpers – DateTime – Fechas y horas

Librería para la manipulación de fechas y horas en formato yyyy-mm-dd hh:ii:ss

/**
 * HelperDateTime.php

 * @author      Code Develium
 */

namespace Helpers;

/**
 * Class HelperDateTime
 */
abstract class HelpDateTime
{
    /**
     * Devuelve sólo la hora de una fecha y hora
     * Formato fecha y hora: yyyy-mm-dd hh:mm:ss
     * Formato hora: hh:mm:ss
     *
     * @param string $datetime
     *
     * @return string
     */
    public static function getOnlyTime($datetime)
    {
        list(, $time) = explode(' ', $datetime);
        return $time;
    }

    /**
     * Devuelve sólo la fecha de una fecha y hora
     * Formato fecha y hora: yyyy-mm-dd hh:mm:ss
     * Formato fecha: yyyy-mm-dd
     *
     * @param string $datetime
     * @return string
     *
     */
    public static function getOnlyDate($datetime)
    {
        list($fecha,) = explode(' ',$datetime);
        return $fecha;
    }

    /**
     * Devuelve el día y hora actual GMT en formato dd/mm/yyyy 
     * hh:mm:ss
     * Formato de fecha: yyyy-mm-dd hh.mm:ss
     * @return string
     */
    public static function getNowGMT()
    {
        return gmdate('Y-m-d H:i:s');
    }

    /**
     * Devuelve el día y hora actual en formato dd/mm/yyyy hh:mm:ss
     * Formato de fecha: yyyy-mm-dd hh.mm:ss
     * @return string
     */
    public static function getNow()
    {
        return date('Y-m-d H:i:s');
    }

    /**
     * Indica que fecha/hora es menor
     * > 1 => dt1 > dt2
     * < 1 => dt1 < dt2
     * = 0 => dt1 = dt2
     *
     * @param $strFH1
     * @param $strFH2
     *
     * @return int
     */
    public static function getDiff($strFH1, $strFH2)
    {
        list($d1, $h1) = explode(' ', $strFH1);
        list($d2, $h2) = explode(' ', $strFH2);

        list($nDia1, $nMes1, $nAny1) = explode('-', $d1);
        list($nDia2, $nMes2, $nAny2) = explode('-', $d2);

        list($nh1, $nm1, $na1) = explode(':', $h1);
        list($nh2, $nm2, $na2) = explode(':', $h2);

        return mktime($nh1, $nm1, $na1, $nMes1, $nDia1, $nAny1) -
            mktime($nh2, $nm2, $na2, $nMes2, $nDia2, $nAny2);
    }

    /**
     * Muestra la fecha y hora en función de un formato.
     *
     * @param string $datetime
     * @param string $formato
     * @param bool   $mostrarSegundos
     *
     * @return string
     */
    public static function displayWithFormat( $datetime, 
                                              $formato = 'dd/mm/yyyy',
                                              $mostrarSegundos = true)
    {
        if (HelpValidate::isEmpty($datetime)) {
            return '';
        }

        if (strlen($datetime) == 16) {
            $datetime .= ':00';
        }

        $offset = 0;

        list($dt, $tm) = explode(' ', $datetime);

        $dt = ''; //HelperDate::display($dt, $formato);

        if ($mostrarSegundos) {
            return "$dt $tm";
        } else {
            list($h, $m,) = explode(':', $tm);
            return "$dt $h:$m";
        }
    }

    /**
     * Sumar minutos a una fecha.
     * Formato de fecha: yyyy-mm-ss
     *
     * @param $date
     * @param $minutos
     *
     * @return false|string
     */
    public static function sumarMinutos($date, $minutos)
    {
        return date('Y-m-d H:i:s', 
                     strtotime( $date.' + '.$minutos.' minute'));
    }

    /**
     * Suma una cantidad de días, meses, años, horas, minutos y/o 
     * segundos a una fecha y hora
     * Formato de fecha y hora: yyyy-mm-dd hh:mm:ss
     *
     * @param     $fecha
     * @param int $dd
     * @param int $mm
     * @param int $yy
     * @param int $hh
     * @param int $mn
     * @param int $ss
     *
     * @return string
     */
    public static function sumarFechaHora( $fecha, $dd = 0, 
                                                   $mm = 0, 
                                                   $yy = 0, 
                                                   $hh = 0, 
                                                   $mn = 0, 
                                                   $ss = 0)
    {
        list($any, $mes, $dia) = explode('-', $fecha);
        $date   = $any.'-'.$mes.'-'.$dia;
        $date_r = getdate(strtotime($date));
        return date('Y-m-d', mktime(($date_r[ "hours" ] + $hh),
            ($date_r[ "minutes" ] + $mn),
            ($date_r[ "seconds" ] + $ss),
            ($date_r[ "mon" ] + $mm),
            ($date_r[ "mday" ] + $dd),
            ($date_r[ "year" ] + $yy)));
    }

    /**
     * Establece la configuración horaria
     */
    public static function setLocateTimeZone()
    {
        date_default_timezone_set('Europe/Madrid');
        setlocale(LC_ALL, 'es-ES');
        setlocale(LC_TIME, null);
    }

}