.  

 

 

.
.

02 / 09 / 2014

Usuarios conectados: 18

Cargando documento...

Buscar:

.

Este Sitio:

Principal

Dreamweaver

Fireworks

JavaScript

CSS

Sonido

Artículos

Links

E-ufemismos

Descargas

Historial

 

Mailing List:

Suscríbete a la lista de correo, No practico spamming y ofrece algunas ventajas.

Pulsa aquí para saber más y suscribirte.

 

Recomendados:

Tecnorama >Tutoriales Dreamweaver

 

Manejo de fechas en PHP y MySQL

Versión para imprimir | Translate this page

Este es el primero de una serie de 3 tutoriales sobre manipulacion de fechas en PHP y MySQL, orientado sobre todo a los usuarios de Dreamweaver (especialmente el tercero), aunque los que esten comenzando con PHP y MySQL puede que tambien lo encuentren de utilidad.

El tutorial se basa en un caso prático: tu sitio ofrece una oferta durante un tiempo limitado a los usuarios suscritos y quieres recordarles en cada entrada el tiempo que aún les queda para disfrutarla.
Un ejemplo de lo que mostraría sería ésto:


"Hola Juan: la oferta de subscripción gratuita durante 90 días (a la que se apuntó el 20/07/2004) terminará dentro de 80 días(20/10/2004)".


Si prestas atención al ejemplo, verás que necesitamos 5 variables:
1.-Cuándo se apuntó el usuario?
Es la fecha de subscripción (20/07/2004). Es una variable que debería estar alojada en la base de datos.
2.-Qué día es hoy?
Necesitaremos saber la fecha actual, ya que nos servirá para calcular el tiempo restante.
3.-Cuánto dura la subscpripión?
Son los 90 días del ejemplo. Podría estar recogida en la base de datos o simplemente declarada en el código, que será el método que utilizaremos para simplificar el ejemplo.
4.-Cuándo termina la subscripción (20/10/2004)?
Lo podemos calcular: Será la fecha de subscripción más la duración de la misma.
5.- Cuál es el tiempo restante (80 días)?
También lo podemos calcular: Será la diferencia entre la fecha de expiración (obtenida en el punto 4) y la fecha actual.


Es decir: Los únicos valores que necesitamos aportar son la fecha de subscripción y la duración de la misma; todos los demas valores los podemos obtener.


Para nuestro ejemplo, hemos guardado la fecha de subscripción en un campo llamado "fecha_subscrip", que forma parte de una tabla llamada "tbl_usuarios" con un formato del tipo "date" (para ver de paso un poco sobre este tipo de campo y como manejarlo). El nombre de usuario se aloja en el campo ''nombreUsuario".


La sentencia SQL, vista en DWMX, podría tener este aspecto. No es un modelo muy ortodoxo, pero nos permitirá concentrarnos en lo que nos interesa:



SELECT nombreUsuario, UNIX_TIMESTAMP(fecha_subscrip) AS fecha_subscrip FROM tbl_usuarios WHERE nombreUsuario='unParametro'

En esta consulta hay ciertos detalles:
1.- El uso de la función 'UNIX_TIMESTAMP(campo)': Esta función devuelve el valor del campo indicado en formato UNIX (segundos transcurridos desde 1/1/1970). Este formato UNIX es el más indicado para manejar fechas en PHP, por lo que es altamente recomendable (en mi opinion) reconvertir cualquier fecha a este formato si se desea manipularla en PHP.


Algunos ya sabréis que MySQL también posee funciones para manejo de fechas y el segundo artículo, basado en este mismo ejemplo, se dedicará al tema. De hecho, frente a la flexibilidad del método utilizando PHP, realizar los cálculos directamente en la consulta puede en ocasiones optimizar el rendimiento.


2.- Hemos definido un alias:


(UNIX_TIMESTAMP(fecha_subscrip) AS fecha_subscrip)

Esto permitirá a DWMX mostrar correctamente el nombre, ya que no entiende muy bien los nombres de campos envueltos por una función pero maneja perfectamente el uso de alias.


3.- Hemos incluído un parámetro para filtrar el dato: puedes utilizar el sistema que prefieras, por lo que aqui simplemente lo hemos definido como una variable de sesión.


Ya tenemos todo lo necesario para calcular los 5 valores:


1.- Fecha de Subscripción:
Una sencilla: sólo necesitamos la función date():


echo date("d/m/Y",$row_RSusuarios['fecha_subscrip']);

2.-Fecha actual:
Tampoco es dificil: date() dando formato a time() o, más sencillo aún, declarando sólamente el formato (la función asume que nos referimos a la hora actual)


echo date("d/m/Y",time());
echo date("d/m/Y");

3.- Duración de la oferta:
Para simplificar este paso, la declararemos directamente en el código. Utilizaremos para el ejemplo 90 días.


4.- Fecha de expiración:
Obtener este dato es un poco más complicado, pero para eso existe la función strtotime().
¿ Qué la hace interesante? Pues la capacidad que tiene para entender y manejar fechas en formato más o menos "humano".


strtotime() requiere 2 parametros:
• Una fecha en formato string: El formato utilizado se debe ser uno de los incluidos en la lista de formatos GNU, incluyendo fechas relativas(como "next Monday"). Puedes ver el listado completo en:
http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html
• Una fecha en formato Unix: Este parámetro es opcional. Si no se declara, la función asume por defecto la fecha actual si el primero es una fecha relativa ("next monday", por ejemplo). Si la fecha del primer parametro es absoluta ("5 August 2002"), no es necesario declararlo. La función devuelve el resultado en formato Unix (es decir, manejable sin problemas por date()).


Veamos algunos ejemplos para entenderlo mejor:

strtotime("now");//equivale a time()
strtotime("5 August 2002");//Devuelve la fecha Unix del 5 de Agosto de 2002
strtotime("next Monday");//Devuelve el próximo lunes
strtotime("+2 weeks");//Devuelve la fecha para dentro de 2 semanas a partir de hoy

Algún ejemplo más complejo:

//Buscamos Unix timestamp:
$fecha=strtotime("5 August 2002");
//Ahora, el Unix timestamp para el primer lunes
//después del 5 de agosto:
$proximo_lunes=strtotime("next Monday",$fecha);
//damos formato...
echo date("d/m/Y",$proximo_lunes);

O, si prefieres hacerlo todo en una linea:


echo date("d/m/Y",strtotime("next Monday",strtotime("5 August 2002")));

Por lo tanto, para calcular la fecha de finalización podemos escribir (recuerda que ya habíamos hallado el formato Unix de "fecha_subscrip" en la consulta a la base de datos a través de UNIX_TIMESTAMP()):


$fecha_final=strtotime("+90 days",$row_RSusuarios['fecha_subscrip']);
echo date("d/m/Y", $fecha_final);

5.- Dias hasta la finalización
Ya sabemos la fecha actual (punto 2) y la final (punto 4), por lo que simplemente dividir la diferencia entre 86400 (número de segundos que tiene un día) nos dará la solución.


Vamos a agruparlo todo:


<?php
//Fecha de inicio, alojada en la BD:
$fecha_inicio=$row_RSusuarios['fecha_subscrip'];
//final: dentro de 90 dias
$fecha_final=strtotime("+90 days", $fecha_inicio);
//¿Cuanto queda?
$quedan_dias=ceil(($fecha_final-time())/86400);
//damos un poco de formato a los dias restantes...
switch($quedan_dias){
  case 0:
    $dias="hoy";
    break;
  case 1:
    $dias="mañana";
    break;
  default:
    $dias="dentro de ".$quedan_dias." días";
}
?>

Un párrafo de ejemplo, utilizando las variables:


Tu oferta de prueba durante 90 días, que comenzó el <?php echo date("d/m/Y", $fecha_inicio)?>, finaliza <?php echo $dias?>, el <?php echo date("d/m/Y", $fecha_final)?>

En el siguiente tutorial obtendremos el mismo resultado, pero directamente desde la consulta a MySQL.

¿Comentarios? 45, de momento. Mostrando 6 ->10

6.- This is exactly what I was looking for. Thanks for wrigint!

7.

8.

9.- Hola buenas noches, aun me sigue dando vueltas como darle formato a una fecha atraída desde mysql, por ejemplo tengo una tabla donde se guardan los registros que se van ingresando durante el día, en mi tabla de mysql tengo un campo llamado "noticia" y un campo llamado fecha, ok. Obviamente el usuario ingresa los datos desde un formulario, el formulario cuando envía los datos los inserta en mi tabla de mysql, en la parte de la inserción de la fecha use la función now() para que me ponga la fecha en que ingrese el registro, hasta ahi todo esta bien.

Una vez guardado el registro con la fecha, en un archivo php hago la consulta sobre los registros que tengo en esa tabla, lo hago de la siguiente forma:












Explico:
Conecto a mi base de datos
Hago la consulta seleccionado mi tabla análisis
Hago que todos los registros en mi tabla de mysql se muestren en una tabla.

Mi duda es como darle el formato a una fecha que mando a llamar de mysql, he probado varias opciones y no logró hacerlo, alguien podría ayudarme u orientarme de como poder darle otro formato a mi fecha y no el que me trae de mysql, gracias.

10.

« Previous | 1 - 5 | 6 - 10 | 11 - 15 | 16 - 20 | 21 - 25 | 26 - 30 | 31 - 35 | 36 - 40 | 41 - 45 | Next »

Añade tu comentario



Escribe el código de la imagen superior:

:

Tutoriales Dreamweaver

-El muy buscado Menú desplegable

-¿Qué $%&$% es 'SSI'?

-Utilizar tablas de excel para actualizar tablas en html.

-Plantillas en DW MX: Regiones opcionales.

-Adaptar tablas a la ventana.

-Vista diseño para formatos no reconocidos

-Carga de imagenes en orden

-Mi primera Extensión

-Rollover remoto ('Disjointed Rollover')

-Iframes vs. Frames

-Contenido dinámico en celdas

-DW MX: Repeating Tables

-DW MX: Practica el Cloaking

-DW MX: CSS en tiempo Diseño

-Buscar y Reemplazar en Dreamweaver

-Menú dinámico

-Collaborative Dreamweaver: Design Notes and Files Panel

-Using PHP Server Formats and MySQL Dates

-Creando un Newsticker

-Generate Excel files with DWMX/PHP/MySQL (part 1)

-Manejo de fechas en PHP y MySQL

-Generate Excel files with DWMX/PHP/MySQL (part 2)

-Manejo de Fechas en consultas a MySQL

-Showing all records by default in a results page (PHP)

-Retrieving data using AHAH (1)

-Retrieving data using AHAH (2)

-Retrieving data using AHAH (3)

TECNORAMA es simplemente una página personal. No sirve ni de promoción del autor ni cosas por el estilo.
Todos los códigos, textos y tutoriales son de libre uso mientras se mencione al autor (no es mucho pedir)
Este sitio es compatible con IE6/NS6/Mozilla1.0
Para contactar, puedes enviarme un e-mail a tecnorama@hotmail.com