Comunidad de diseño web y desarrollo en internet online

Comparación de fechas en MySql

Citar            
MensajeEscrito el 08 Ago 2006 01:34 pm
Tengo un problema al hacer unas comparaciones con fechas, obviamente se trabaja diferente que con oracle o sybase, eso nos tiene muy confundidos; el problema radica porque queremos hacer unos reportes con fpdf y no salen.

En este ejemplo:

Código :

<?php 
   require_once('date/DateUtils.class.php'); //una clase creada para manejar los meses en español
   $fecha = '2006-07-31';
   $fecha1 = DateUtils::format('%A, %d %b %Y - %I:%M %P',$fecha);
   $fecha2 = DateUtils::format('%d-%m-%Y',$fecha);
   $fecha3 = date("d-m-Y",$fecha);
   echo "fecha 1: ".$fecha1."   ";
   echo "fecha 2: ".$fecha2."   ";
   echo "fecha 3: ".$fecha3."   ";
?>


Nos dá como resultado:
fecha 1: Miércoles, 31 Ago 1969 - 8:33 PM
fecha 2: 31-12-1969
fecha 3: 31-12-1969

Y nos debería dar 31-07-2006.

Por favor les estaríamos muy agradecidos nos explicaran cuál es el error?, Gracias.

Por aramacao00

10 de clabLevel



Genero:Masculino  

Venezuela

firefox
Citar            
MensajeEscrito el 08 Ago 2006 06:51 pm
no entiendo por que dices MySQL, y solo muestras codigo de PHP, bueno mira esto

Código :

<?php
$fecha3 = date("d-m-Y",mktime(0,0,0,7,31,2006));
echo $fecha3;
setlocale(LC_TIME,"spanish");
echo strftime("%A %d de %B de %Y", mktime(0,0,0,7,31,2006));
?>


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 09 Ago 2006 05:06 pm
Epale Maikel, fino. Bueno realmente era php con MySql. Te muestro y al que le haga falta bueno que pruebe lo que envío.

Para probar lo que me enviaste hoy hice una tabla de ejemplo:

Código :

DROP TABLE IF EXISTS `fechas`;
CREATE TABLE IF NOT EXISTS `fechas` (
  `f_id` bigint(20) NOT NULL default '0',
  `f_texto` varchar(250) NOT NULL default '',
  `f_fech01` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`f_id`,`f_texto`,`f_fech01`)
) TYPE=MyISAM;
-- 
-- Volcar la base de datos para la tabla `fechas`
-- 
INSERT INTO `fechas` (`f_id`, `f_texto`, `f_fech01`) VALUES (1, 'prueba n 1', '2006-08-06');
INSERT INTO `fechas` (`f_id`, `f_texto`, `f_fech01`) VALUES (1, 'prueba n 2', '2004-02-10');
INSERT INTO `fechas` (`f_id`, `f_texto`, `f_fech01`) VALUES (1, 'prueba n 3', '2005-10-06');
INSERT INTO `fechas` (`f_id`, `f_texto`, `f_fech01`) VALUES (2, 'prueba n 4', '2005-09-20');
INSERT INTO `fechas` (`f_id`, `f_texto`, `f_fech01`) VALUES (2, 'prueba n 5', '2006-01-03');


Luego un php de prueba de fechas:

Código :

<?php 
   require_once('connect.php');
   $f_id = 1;
   $fecha0 = "2004-01-01";
   $fechas = array();
   $fechas = explode("-",$fecha0);
   $ano = intval($fechas[0]);
   $mes = intval($fechas[1]);
   $dia = intval($fechas[2]);
   $fecha1 = date("Y-m-d",mktime(0,0,0,$mes,$dia,$ano));
   $fecha0 = "2006-08-31";
   $fechas = explode("-",$fecha0);
   $ano = intval($fechas[0]);
   $mes = intval($fechas[1]);
   $dia = intval($fechas[2]);
   $fecha2 = date("Y-m-d",mktime(0,0,0,$mes,$dia,$ano));
   $sql = "SELECT `f_id`,`f_texto`, `f_fech01` FROM `fechas` WHERE `f_id` = $f_id AND `f_fech01` BETWEEN '$fecha1' AND '$fecha2';";
   $resulta= mysql_query($sql,$conn);
   if (!$resulta) {
      $message  = 'No pudo consultar el registro: ' . mysql_error() . "\n";
      $message .= 'Para el query: ' . $sql;
      die($message);
   } else {
      $num_row = mysql_num_rows($resulta);
      if ($num_row > 0) {
         while($row = mysql_fetch_array($resulta)) {
            $line = $row["f_id"].';'.$row["f_texto"].';'.$row["f_fech01"];
            echo $line;
         }
      } else {
         $midato= "0:"; 
      }
   }
   mysql_close($conn);
   return $midato; 
?>


Y realmente funciono perfecto, Gracias. De todas formas si alguien tiene una mejor solución a la necesidad comparando fechas pués se le agradece.

Pasen un excelente día.

Por aramacao00

10 de clabLevel



Genero:Masculino  

Venezuela

firefox
Citar            
MensajeEscrito el 09 Ago 2006 05:51 pm
ah eso, no necesitas parsear tanto, mysql lo hace por ti ;)

Código :

$fecha2 = '2006 03 19';
$fecha1 = '2005 10 01';
$sql = "SELECT field FROM `table` WHERE DATE_FORMAT(FieldDate,'%Y %m %d') BETWEEN '$fecha1' AND '$fecha2';";


mas informacion en
Funciones de Fecha y Hora en MySQL

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 11 Ago 2006 01:33 pm
Le respuesta ideal.

Tremendas Gracias, elimine un montón de parametros.

Por aramacao00

10 de clabLevel



Genero:Masculino  

Venezuela

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.