alvaro-prieto
5/4/2017 - 10:18 AM

Fecha Fechas PHP

Clase Fecha - Documentación de Referencia

1. Inicialización y Estado

  • __construct($fecha="", $hoySiNull=true): Inicializa la fecha. Si está vacía y $hoySiNull es true, usa hoy.
  • asigna($fecha): Reasigna una nueva fecha y recalcula el estado interno.
  • correcta(): Devuelve bool indicando si la fecha es válida.

2. Extracción de Componentes

  • dia(): Devuelve el día (1-31).
  • mes(): Devuelve el mes (1-12).
  • ano(): Devuelve el año (ej. 2023).
  • hora($segundos=true): Devuelve la hora (ej. 10:45:33 o 10:45).
  • diaSemana(): Devuelve el día de la semana (1-7, donde 1 es lunes).
  • numeroSemana(): Devuelve el número de semana del año.
  • diasDeMes(): Devuelve la cantidad de días que tiene el mes actual.

3. Formatos de Salida Básicos

  • __tostring(): Devuelve la fecha en formato isoCompleto().
  • iso($separador=""): Formato j-n-Y (sin ceros a la izquierda).
  • isoCompleto($separador=""): Formato d-m-Y (con ceros).
  • mysql($separador=""): Formato Y-n-j (sin ceros).
  • mysqlSimple($separador=""): Alias de mysql().
  • mysqlCompleto($separador=""): Formato Y-m-d (con ceros).
  • RFC(): Formato RFC-822 (ej. Wed, 02 Oct 2002 13:00:00 GMT).
  • mongo(): Devuelve un objeto MongoDB\BSON\UTCDateTime.

4. Formatos de Salida en Texto (Legibles)

  • string($diaSemana=false, $anio=true): Devuelve fecha legible (ej. "4 de enero de 2007").
  • mesString($prefijo="", $sufijo=""): Nombre del mes en texto.
  • anoString($prefijo="", $sufijo=""): Año en texto con afijos.
  • diaSemanaString($dia="", $prefijo="", $sufijo=""): Nombre del día de la semana.
  • fechaMesCorto($parametros=array()): Formato corto (ej. "23 May 18").
  • delAl($fecha2, $semana=true, $mostrarEl=false, $modoMin=false): Cadena descriptiva de rango ("Del X al Y").
  • delAlRedux($ops): Versión alternativa y configurable del rango entre dos fechas.
  • enumeraFechas($fechas): Convierte un array de fechas en texto enumerado (ej. "4, 5 y 9 de junio").

5. Cálculos y Diferencias

  • mayorQueHoy(): Devuelve bool si la fecha es estrictamente futura.
  • diferenciaDias($fecha="", $texto=false): Días de diferencia. Si $texto=true, devuelve string humano.
  • diferenciaHoras($fecha=""): Horas de diferencia (float).
  • diferenciaMinutos($fecha=""): Minutos absolutos de diferencia.
  • quedan($previa="en", $posterior="hace"): Devuelve texto relativo (ej. "hace 2 meses", "en 3 días").
  • fechasSemana($formato="mysql"): Devuelve array con el lunes [0] y domingo [1] de la semana de la fecha.

6. Modificación y Operaciones Temporales

  • masDias($n): Suma/resta n días a la fecha interna.
  • masHoras($n): Suma/resta n horas.
  • masIntervalo($periodo, $unidad): Añade o resta un intervalo de tiempo genérico.

    Tip: Cómo modificar Años, Meses o Minutos Al no existir métodos como masAnos() o masMeses(), se utiliza este método.

    • Sumar 3 años: $fecha->masIntervalo(3, "year");
    • Restar 2 meses: $fecha->masIntervalo(-2, "month");
    • Unidades soportadas: second, minute, hour, day, week, month, year.
  • masIntervalo2($periodo, $unidad): Similar a masIntervalo, usa DateInterval. (Ojo: en el código original tiene un error de variable en el retorno).
  • masDiasHabiles($dias): Suma días saltando sábados y domingos.
  • masDiasEnLaboral($dias): Suma días naturales, pero si cae en fin de semana lo ajusta al viernes o lunes.
  • proximaFechaPeriodica($periodicidad, $unidad=null, $nueva_fecha=false, $redondeo=true): Calcula el siguiente ciclo temporal exacto.

7. Métodos Estáticos (Clase Fecha)

  • Fecha::convierteSoapFpAMySql($fecha): Convierte YYYYMMDD HHmiSS a YYYY-MM-DD HH:mi:SS.
  • Fecha::convierteFechaASoapFp($fecha): Inversa de la anterior.
  • Fecha::excel2Ts($excel): Convierte formato de fecha interno de Excel a Timestamp Unix.

8. Funciones Globales (Externas a la clase)

  • mesCadena($mes, $corto=false): Devuelve el nombre del mes dado su número (1-12).
  • mesNumero($mes): Devuelve el número del mes dado su nombre en español.

	$hoy = new Fecha();
	$fecha =  new Fecha(current($existeMeGusta)['fecha']);
	$diferencia = $hoy->diferenciaDias($fecha->mysqlCompleto());	
	
	var_dump($diferencia);
	var_dump($hoy->string());  //' 4 de septiembre de 2019'
	var_dump($hoy->iso());  //4-9-2019
	var_dump($hoy->isoCompleto());//'04-09-2019'
	var_dump($hoy->mysql()); //'2019-9-4
	var_dump($hoy->mysqlCompleto()); //'2019-09-04 (es la que se usa en BD)
	
$hoy = new Fecha(); 
//si queremos guardarla en BD, sería:
$hoy = $fecha->mysqlCompleto();
$parametros["fecha"] = $hoy;
$res= $this->_inserta($parametros);

//o incluso para el caso de hoy, se puede guardar lo siguiente:
$hoy = "now()";

//a veces queremos modificar una parte de la fecha, no sé si hay métodos para eso
//pero a una mala se puede volver a crear un nuevo objeto fecha.
$hoy = new Fecha("2020-".$hoy->mes()."-".$hoy->dia());

//se pueden agregar o restar días
$hoy->masDias(1);
$hoy->masDias(-2);