1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
<?php
/********************************************************************
**** ****
** Este script sirve para crear una fecha pasada como parametro **
** (Ya sea MySQL o Timestamp) con un formato especificado usando
** los estandares de la función 'date()' q son los siguientes:
**
** a - "am" o "pm"
** A - "AM" o "PM"
** d - día del mes, dos dígitos con cero a la izquierda; es decir, de "01" a "31"
** D - día de la semana, en texto, con tres letras; por ejemplo, "Vie", "Lun"
** F - mes, en texto, completo; por ejemplo, "Enero"
** j - día del mes sin cero inicial; de "1" a "31"
** l ('L' minúscula) - día de la semana, en texto, completo; por ejemplo, "Viernes"
** L - "1" or "0", según si el año es bisiesto o no
** S - sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd"
** t - número de días del mes dado; de "28" a "31"
** m - mes; de "01" a "12"
** n - mes sin cero inicial; de "1" a "12"
** M - mes, en texto, 3 letras; por ejemplo, "Jan"
** w - día de la semana, en número, de "0" (domingo) a "6" (sábado)
** Y - año, cuatro cifras; por ejemplo, "1999"
** y - año, dos cifras; por ejemplo, "99"
** z - día del año; de "0" a "365"
** h - hora, de "01" a "12"
** H - hora, de "00" a "23"
** g - hour, sin ceros, de "1" a "12"
** G - hour, sin ceros; de "0" a "23"
** i - minutos; de "00" a "59"
** s - segundos; de "00" a "59"
** U - segundos desde el valor de 'epoch'
**
** Recomiendo no manejar horas cuando la fecha de entrada sea
** MySQL ia q el script tiene algunos bugs al respecto.
** Por otro lado, si la fecha de entrada es Timestamp se pueden
** manejar todos los formatos incluyendo horas...
**
** Si se omite la hora de entrada, el script usará la hora actual
**
** La fecha devuelta se ajusta acorde a la zona horaria especifi-
** cada por el parametro $tz con los textos de los días i/o meses
** en castellano.
**
** La función está basada en una de tantas q se usan en el siste-
** ma de foros phpBB, solo la modifiqué ajustandola a mis necesi-
** dades...
**
** Puedes usar i modificar este script como gustes, incluso bo-
** rrar estas estorbosas lineas amarillas, solo recuerda quien **
** lo hizo... =] ****
********************************************************************/
#*****************************************************************************#
#** $formato : Formato de la fecha de salida. Ej: d-m-Y |-> 04-04-2004 **#
#** $fecha : La fecha de entrada a convertir. Puede estar tanto en MySQL **#
#** : como en Timestamp. (Recomiendo usar Timestamp si es posible) **#
#** $tz : Modificador de Zona Horaria. **#
#*****************************************************************************#
function CrearFecha($formato, $fecha, $tz){
# Arreglo con los días i meses i sus traduxiones.
$trad = array(
'Sunday' => 'Domingo', 'Monday' => 'Lunes',
'Tuesday' => 'Martes', 'Wednesday' => 'Miércoles',
'Thursday' => 'Jueves', 'Friday' => 'Viernes',
'Saturday' => 'Sábado',
'Sun' => 'Dom', 'Mon' => 'Lun',
'Tue' => 'Mar', 'Wed' => 'Mie',
'Thu' => 'Jue', 'Fri' => 'Vie', 'Sat' => 'Sab',
'January' => 'Enero', 'February' => 'Febrero',
'March' => 'Marzo', 'April' => 'Abril',
'May' => 'Mayo', 'June' => 'Junio',
'July' => 'Julio', 'August' => 'Agosto',
'September' => 'Septiembre', 'October' => 'Octubre',
'November' => 'Noviembre', 'December' => 'Diciembre',
'Jan' => 'Ene', 'Feb' => 'Feb', 'Mar' => 'Mar',
'Apr' => 'Abr', 'May' => 'May', 'Jun' => 'Jun',
'Jul' => 'Jul', 'Aug' => 'Ago', 'Sep' => 'Sep',
'Oct' => 'Oct', 'Nov' => 'Nov', 'Dec' => 'Dic',
);
# Si no se pasó una fecha como parametro, usa la fecha actual.
if(!$fecha) $fecha = time();
# Si la fecha está en formato MySQL, La ajusta a Timestamp.
if( count(explode('-', $fecha)) > 1 ) {
# Si acaso la fecha trajera la hora, Divide la cadena (Fecha, Hora).
$fecha = explode(' ',$fecha);
# Divide la parte de la Fecha.
list($año,$mes,$dia) = explode('-', $fecha[0]);
# Divide la parte de la Hora.
list($hora,$min,$seg) = explode(':', $fecha[1]);
# Si la Hora es pm, le suma 12 horas a la Hora pm.
# de esta forma, si estaba en formato de 12 h, la convierte a 24 h.
if( ($fecha[2] == 'pm' || $fecha[2] == 'PM') && $hora != 12) $hora = $hora+12;
# Convierte a Timestamp la Fecha completa.
$fecha = mktime($hora,$min,$seg,$mes,$dia,$año);
}
# Retorna la fecha en el formato especificado mas el ajuste de
# la zona horaria reemplazando las frases de los meses y días
# (si se especifica en $formato) por frases castellanas.
return strtr(@gmdate($formato, $fecha + (3600 * $tz)), $trad);
}
# Ejemplos:
#
#echo CrearFecha('D d-M-Y',date('Y-m-d',time()),-6,1);
#echo CrearFecha('l d.F Y',date('Y-m-d',time()),-6,1);
#echo CrearFecha('F d, Y',time(),-6);
#echo CrearFecha('F d, Y H:i.s a','2004-08-08 1:20 pm',-6,1);
?>
|