Foros del Web » Programando para Internet » PHP »

Verificar fechas para hacer calculos

Estas en el tema de Verificar fechas para hacer calculos en el foro de PHP en Foros del Web. Hola amigos. Tengo que verificar dos fechas ($desde, $hasta) para que mediante ellas se pueda consultar una tabla en la base de datos que almacena ...

  #1 (permalink)  
Antiguo 06/08/2012, 21:08
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Verificar fechas para hacer calculos

Hola amigos. Tengo que verificar dos fechas ($desde, $hasta) para que mediante ellas se pueda consultar una tabla en la base de datos que almacena un rango.

Por ejemplo $desde = '2012-08-10'; $hasta = '2012-08-14';

y en la base de datos las fechas son desde = 2012-07-27. Hasta = 2012-11-29.

Estoy tratando con este código pero al hacer una doble condición me da error:

Código PHP:
Ver original
  1. $desde = '2012-08-10';
  2. $hasta = '2012-08-14';
  3.  
  4. $rs = mysql_query("SELECT desde, hasta FROM planes WHERE id_posada='2'");
  5.  
  6. while ($result = mysql_fetch_array($rs)) {
  7.     $desde_plan = $result['desde'];
  8.     $hasta_plan = $result['hasta'];
  9. }
  10.  
  11. if(($desde => $desde_plan) && ($desde =< $hasta_plan)) {
  12.     //fecha valida
  13. }
  14. else {
  15.        //fecha no está dentro del plan seleccionado
  16. }

Como puedo plantear esto en el if..... Gracias
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 06/08/2012, 21:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Verificar fechas para hacer calculos

Los operadores de comparación están todos al revés.

Menor o igual que es <= y no =>
Mayor o igual que es >= y no =<

Nota las diferencias.

PDTA: dichas comparaciones deberías hacerlas directamente desde la consulta de SQL y no con PHP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/08/2012, 21:20
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

jajajaja que horror siempre he sido mala con estos simbolos. Respecto a lo otro, creo que no puedo hacerlo desde la consulta SQL porque primero tengo que consultar estos 2 valores almacenados en la tabla mysql para luego compararlos con los que el usuario selecciona en los datepicker (calendarios).

No se si mi lógica está mala, pero creo que es asi.

Este es el formulario donde el usuario selecciona las fechas:

http://vamonosdevacaciones.com.ve/co...otizar=Cotizar
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 06/08/2012, 21:38
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

siempre puedes hacer algo como esto
http://www.e-capy.com/verificar-si-u...-rango-en-php/, aunque pateketrueke te dio una opción , saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 06/08/2012, 21:38
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Logré hacerlo asi:

Código PHP:
Ver original
  1. if(($desde == $desde_plan && $desde < $desde_plan) or ($hasta == $hasta_plan && $hasta > $hasta_plan)) {
  2.     echo 'fecha valida';
  3. }
  4.  
  5. else{
  6.     echo 'Fecha no está dentro del plan seleccionado<br>';
  7.     echo 'Escoger fechas entre el ' . $desde_plan . ' hasta el ' . $hasta_plan . '<br>' ;
  8. }

No me da error pero se va para la opción del else, es decir no me evalua bien

????
__________________
Caminando con el corazón partío
  #6 (permalink)  
Antiguo 06/08/2012, 21:50
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

carlos está muy buena la función pero no la hace para el rango de las 2 fechas almacenadas porque tengo que evaluar las dos fechas que introduce el usuario con las 2 que estan en la base de datos.

Es para volverse locos estas cosas

????
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 06/08/2012, 22:15
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Lo logré asi:

Código PHP:
Ver original
  1. if($desde >= $desde_plan && $hasta <= $hasta_plan && $hasta) {
  2.     echo 'fecha valida <br>';
  3. }
  4.  
  5. else{
  6.     echo 'Fecha no está dentro del plan seleccionado<br>';
  7.     echo 'Escoger fechas entre el ' . $desde_plan . ' hasta el ' . $hasta_plan . '<br>' ;
  8. }

pero ahora debo conocer los dias entre las fechas $desde y $hasta para luego evaluar uno por uno contra una consulta a la tabla temporadas y saber si las fechas son de temporada alta o temporada baja (la tabla solo tiene las temporadas altas).

Con esta función consigo conocer los dias:

Código PHP:
Ver original
  1. function dates_between($startdate, $enddate, $format=null){
  2. (is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
  3. (is_int($enddate)) ? 1 : $enddate = strtotime($enddate);
  4.  
  5. if($startdate > $enddate){
  6. return false; //The end date is before start date
  7. }
  8. while($startdate < $enddate){
  9. $arr[] = ($format) ? date($format, $startdate) : $startdate;
  10. $startdate += 86400;
  11. }
  12. $arr[] = ($format) ? date($format, $enddate) : $enddate;
  13.  
  14. return $arr;
  15. }
  16.  
  17. $data = dates_between($desde, $hasta, 'Y-m-d');
  18.  
  19. foreach ($data as $date) {
  20.     echo $date . '<br>';
  21. }

pero no se como sacar del foreach cada uno para poder preguntarle a la tabla temporadas si existen.

????
__________________
Caminando con el corazón partío
  #8 (permalink)  
Antiguo 06/08/2012, 22:48
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Ok, ya conseguí extraer los datos de la función asi:

Código PHP:
Ver original
  1. $posts = count($data);
  2.     for($i = 0; $i <= $posts; $i++)
  3.     {
  4.        $dato[] = $data ."<br/>";
  5.     }
  6.     echo $data[0] . '<br>';
  7.     echo $data[1] . '<br>';

pero no se como hacer para compararlos con las fechas almacenadas en la tabla temporadas (desde, hasta) porque por ejemplo en este caso fueron 5 fechas las que iban desde hasta:

$desde = '2012-08-10';
$hasta = '2012-08-14';

pero mi pregunta es que si no conozco ese rango como hago. Es decir, como evaluo esto, con el array $dato[];

????
__________________
Caminando con el corazón partío
  #9 (permalink)  
Antiguo 08/08/2012, 11:20
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

estaba un poco fastidiado y quise hacer un poco y quería hacer unas pruebas con closures verifica
Código PHP:
Ver original
  1. $comparacionRango = function(array $intervalo, array $intervaloComparar) {
  2.     $desde1 = new DateTime($intervalo[0]);
  3.     $hasta1 = new DateTime($intervalo[1]);
  4.     $desde2 = new DateTime($intervaloComparar[0]);
  5.     $hasta2 = new DateTime($intervaloComparar[1]);
  6.     $diff = $desde1->diff($hasta1);
  7.     for($i = 0; $i <= $diff->days; $i++) {    
  8.         if($desde1->getTimestamp() >= $desde2->getTimestamp() && $desde1->getTimestamp() <= $hasta2->getTimestamp()) {
  9.             $return[$desde1->format('d-m-Y')] =  "dentro del rango <br/>";
  10.         } else {
  11.             $return[$desde1->format('d-m-Y')] = "fuera del rango<br />";
  12.         }
  13.         $desde1->modify("+1 day");        
  14.     }
  15.     return $return;
  16. };
  17.  
  18. $retorno = $comparacionRango(array('2012-01-01', '2012-01-31'), array('2012-01-15', '2012-02-15'));
  19. echo "<pre>";print_r($retorno);echo "</pre>";
el resultado de eso fue
Cita:
Array
(
[01-01-2012] => fuera del rango

[02-01-2012] => fuera del rango

[03-01-2012] => fuera del rango

[04-01-2012] => fuera del rango

[05-01-2012] => fuera del rango

[06-01-2012] => fuera del rango

[07-01-2012] => fuera del rango

[08-01-2012] => fuera del rango

[09-01-2012] => fuera del rango

[10-01-2012] => fuera del rango

[11-01-2012] => fuera del rango

[12-01-2012] => fuera del rango

[13-01-2012] => fuera del rango

[14-01-2012] => fuera del rango

[15-01-2012] => dentro del rango

[16-01-2012] => dentro del rango

[17-01-2012] => dentro del rango

[18-01-2012] => dentro del rango

[19-01-2012] => dentro del rango

[20-01-2012] => dentro del rango

[21-01-2012] => dentro del rango

[22-01-2012] => dentro del rango

[23-01-2012] => dentro del rango

[24-01-2012] => dentro del rango

[25-01-2012] => dentro del rango

[26-01-2012] => dentro del rango

[27-01-2012] => dentro del rango

[28-01-2012] => dentro del rango

[29-01-2012] => dentro del rango

[30-01-2012] => dentro del rango

[31-01-2012] => dentro del rango

)
ahora lo que quieras hacer tu cuando esta dentro o fuera del rango queda de ti, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Última edición por carlos_belisario; 08/08/2012 a las 13:58
  #10 (permalink)  
Antiguo 08/08/2012, 22:43
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

muchas gracias carlos está perfecto pero en mi version de php no funciona el diff. Me da miedo cambiar la versión ahorita que estoy terminando la página.

Pienso que con la otra opción lo puedo hacer pero no se como. Esta es la otra opción:

Código PHP:
Ver original
  1. $posts = count($data);
  2.     for($i = 0; $i <= $posts; $i++)
  3.     {
  4.        $dato[] = $data ."<br/>";
  5.     }

pero no se como hacer para sacarlos a todos y compararlos....


???
__________________
Caminando con el corazón partío
  #11 (permalink)  
Antiguo 08/08/2012, 23:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Verificar fechas para hacer calculos

Y porqué mejor no lo haces desde la consulta usando BETWEEN --- AND ---?

Código PHP:
Ver original
  1. $desde = '2012-08-10';
  2. $hasta = '2012-08-14';
  3.  
  4. $query = "SELECT desde, hasta FROM planes WHERE id_posada='2' ";
  5. $query .= "AND desde BETWEEN $desde AND $hasta ";
  6. $query .= "AND hasta BETWEEN $desde AND $hasta ";
  7.  
  8. $rs = mysql_query($query) or die(mysql_error());

$desde y $hasta no deben ser iguales.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 08/08/2012, 23:24
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Lo que necesito es hacer esta consulta:

Código PHP:
Ver original
  1. $rs2 = mysql_query("SELECT fecha_temp_alta FROM detalle_temp_alta where AQUI EL ARRAY");

Y ese es mi rollo, que no se como consultar la tabla con el resultado del array.

Por favor si pueden explicarme como lo hago para ver si alguna vez aprendo esto.

Gracias.
__________________
Caminando con el corazón partío
  #13 (permalink)  
Antiguo 08/08/2012, 23:28
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Hola triby, lo que pasa es que tengo que consultar contra la tabla es el resultado de los dias entre las 2 fechas dadas (en este caso son 5 dias). Cada dia debo compararlo con los que están almacenados en la tabla para saber si son temporadas altas.
__________________
Caminando con el corazón partío
  #14 (permalink)  
Antiguo 08/08/2012, 23:51
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Verificar fechas para hacer calculos

Bien, pues usa el BETWEEN con fecha_temp y todos los registros que encuentre serán temporada alta, los otros no.

Supongo que podrías crear un arreglo:
Código PHP:
Ver original
  1. $fechas = array();
  2.  
  3. // Lo más fácil es hacer un ciclo for, pero necesitamos que sea numérico
  4. $inicio = strtotime($desde);
  5. $fin = strtotime($hasta);
  6.  
  7. // Un dia es 86400 segundos
  8. for($i = $inicio; $i <= $fin; $i += 86400) {
  9.     // Convertimos el número a fecha
  10.     $ifecha = date('Y-m-d', $i);
  11.  
  12.     // Inicialmente suponemos que no es temporada alta (false)
  13.     $fechas[$ifecha] = false;
  14. }
  15.  
  16. // Después, verificas los resultados de tu consulta (con BETWEEN)
  17. while(/* $row = mysql_fetch_assoc() o mysql_fetch_array() */) {
  18.     // Simplemente marcas la fecha como temporada alta (true)
  19.     $fechas[$row['fecha_temp_alta']] = true;
  20. }
  21.  
  22. // Para comparar
  23. if($fechas[/* aqui la fecha que deseas comparar */]) {
  24.     // Si entras aquí es porque se trata de temporada alta
  25. } else {
  26.     // No es temporada alta
  27. }
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 09/08/2012, 06:33
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Triby está muy buena tu explicación, pero lo que necesito en esta parte es saber cada una de las fechas del intervalo logrado a través de esta función:

Código PHP:
Ver original
  1. function dates_between($startdate, $enddate, $format=null){
  2.     (is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
  3.     (is_int($enddate)) ? 1 : $enddate = strtotime($enddate);
  4.      
  5.     if($startdate > $enddate){
  6.     return false; //The end date is before start date
  7.     }
  8.     while($startdate < $enddate){
  9.     $arr[] = ($format) ? date($format, $startdate) : $startdate;
  10.     $startdate += 86400;
  11.     }
  12.     $arr[] = ($format) ? date($format, $enddate) : $enddate;
  13.      
  14.     return $arr;
  15.     }
  16.      
  17.     $data = dates_between($desde, $hasta, 'Y-m-d');

para compararlos con lo que guardo en la tabla detalle_temp_alta.

El problema es que en esa tabla guardo solo el mes y el dia de esta forma por ejemplo 08-10, 08-11, etc.

Entonces cuando obtengo las fechas que me da la función anterior, debo guardar cada una de ellas para aplicarle esto:

Código PHP:
Ver original
  1. $dato1 = substr($data[0], -5);

y con esto elimino el año quedandome asi 08-10 para poderlo comparar.

El problema es como sacar cada valor del array en variables separadas para poder hacer esto.

????
__________________
Caminando con el corazón partío
  #16 (permalink)  
Antiguo 09/08/2012, 14:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Verificar fechas para hacer calculos

No veo cuál es el problema... simplemente eliminas Y- de la siguiente línea:

$ifecha = date('Y-m-d', $i);

Con eso ya sólo tienes día y mes.
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 09/08/2012, 22:19
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

aqui tampoco obtuve resultado. Todo estaba bien hasta aplicar el Between y comparar las fechas que no supe como hacer. Esto es lo que tengo:

Código PHP:
Ver original
  1. $fechas = array();
  2.      
  3.     // Lo más fácil es hacer un ciclo for, pero necesitamos que sea numérico
  4.     $inicio = strtotime($desde);
  5.     $fin = strtotime($hasta);
  6.    
  7.     // Un dia es 86400 segundos
  8.     for($i = $inicio; $i <= $fin; $i += 86400) {
  9.         // Convertimos el número a fecha
  10.         $ifecha = date('Y-m-d', $i);
  11.      echo $ifecha . '<br> ';
  12.         // Inicialmente suponemos que no es temporada alta (false)
  13.         $fechas[$ifecha] = false;
  14.     }
  15.     $rs2 = mysql_query("SELECT * FROM detalle_temp_alta where id_posada='2' AND fecha_temp_alta BETWEEN $fechas");
  16.      
  17.     // Después, verificas los resultados de tu consulta (con BETWEEN)
  18.     while($row = mysql_fetch_assoc($rs2)) {
  19.         // Simplemente marcas la fecha como temporada alta (true)
  20.         $fechas[$row['fecha_temp_alta']] = true;
  21.     }
  22.      
  23.     // Para comparar
  24.     if($fechas[$ifecha]) {
  25.         echo 'temporada alta';
  26.     } else {
  27.         echo 'No es temporada alta';
  28.     }

La consulta está malisima porque no se como hacer el between con las fechas $desde, $hasta (que en el caso de ejemplo son 5 fechas)

y tampoco se como comparar las fechas aqui:

if($fechas[$ifecha])

en donde igualmente hay que comparar las fechas y saber cuales estan en temporada alta y cuales no porque despues tengo que tomar cada una para multiplicarlas por el valor de la habitacion en temporada alta y en temporada baja.

Por ejemplo si estas son temporada alta:

2012-08-10 x Precio Temporada Alta
2012-08-11 x Precio Temporada Alta
2012-08-12 x Precio Temporada Alta

y las restantes:

2012-08-13 x Precio Temporada Baja
2012-08-14 x Precio Temporada Baja

Está complicado

?????
__________________
Caminando con el corazón partío
  #18 (permalink)  
Antiguo 10/08/2012, 02:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Verificar fechas para hacer calculos

De acuerdo, la consulta está malísima!

Son 5 fechas (días), sí, pero si son continuas, entonces sólo necesitas principio y fin, porque eso es lo que necesita between, ejemplo:

SELECT * FROM tabla WHERE id = aqui_la_id AND campo_de_fecha BETWEEN inicio AND final

Lo que está en negrillas es necesario para BETWEEN:
1- Nombre de la columna
2- La palabra BETWEEN, que significa ENTRE
3- Valor inicial
4- La palabra AND, para completar "ENTRE esto Y esto otro"
5- Valor final

Todo esto es el equivalente a:

campo_de_fecha >= valor_inicial AND campo_de_fecha <= valor final

La verdad, no he realizado pruebas para saber cuál de las dos formas es más rápida, pero me parece que el uso de BETWEEN queda más legible, pero la decisión es tuya.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 10/08/2012, 09:05
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Hola cambié la consulta asi:

Código PHP:
Ver original
  1. $fechas = array();
  2.      
  3.     $rs2 = mysql_query("SELECT * FROM detalle_temp_alta WHERE id_posada='8' AND fecha_temp_alta='$desde2' or  fecha_temp_alta='$hasta2'");
  4.     // Después, verificas los resultados de tu consulta (con BETWEEN)
  5.     while($row = mysql_fetch_assoc($rs2)) {
  6.         // Simplemente marcas la fecha como temporada alta (true)
  7.         $fechas[$row['fecha_temp_alta']] = true;
  8.        
  9.         }
  10.      
  11.     // Para comparar
  12.     if($fechas[$desde2]) {
  13.         echo 'temporada alta';
  14.     } else {
  15.         echo 'No es temporada alta';
  16.     }

De esta forma si me verifica la fecha, pero el problema es que solo verifica una fecha y necesito verificar el intervalo completo y si esta cada una en temporada alta o baja multiplicar por precio temporada alta o precio temporada baja.

Esta funcion que me indico carlos_belisario lo hace pero no funciona en mi version de php:

Código PHP:
Ver original
  1. $comparacionRango = function(array $intervalo, array $intervaloComparar) {
  2.         $desde1 = new DateTime($intervalo[0]);
  3.         $hasta1 = new DateTime($intervalo[1]);
  4.         $desde2 = new DateTime($intervaloComparar[0]);
  5.         $hasta2 = new DateTime($intervaloComparar[1]);
  6.         $diff = $desde1->diff($hasta1);
  7.         for($i = 0; $i <= $diff->days; $i++) {    
  8.             if($desde1->getTimestamp() >= $desde2->getTimestamp() && $desde1->getTimestamp() <= $hasta2->getTimestamp()) {
  9.                 $return[$desde1->format('d-m-Y')] =  "dentro del rango <br/>";
  10.             } else {
  11.                 $return[$desde1->format('d-m-Y')] = "fuera del rango<br />";
  12.             }
  13.             $desde1->modify("+1 day");        
  14.         }
  15.         return $return;
  16.     };
  17.      
  18.     $retorno = $comparacionRango(array('2012-01-01', '2012-01-31'), array('2012-01-15', '2012-02-15'));
  19.     echo "<pre>";print_r($retorno);echo "</pre>";

Existe otra funcion u otra forma para que lo pueda hacer en mi version 5.2??

Gracias
__________________
Caminando con el corazón partío
  #20 (permalink)  
Antiguo 10/08/2012, 10:04
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

estaba buscando referencias pero lo que coloque es de 5.3+ closure y date dif, ahora pudieras hacerle modificaciones, cambiando el closure por una función normal para que no haya problemas
Código PHP:
Ver original
  1. function comparacionRango(array $intervalo, array $intervaloComparar) {
  2. ...
  3. }
  4. $retorno = comparacionRango(array('2012-01-01', '2012-01-31'), array('2012-01-15', '2012-02-15'));
y el DateTime::diff()
pudieras cambiarlo e implementar esto que dejaron en el manual, aunque personalmente yo actualizaría la versión del php (elección muy personal)
http://www.php.net/manual/es/functio...diff.php#99942, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #21 (permalink)  
Antiguo 10/08/2012, 10:14
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Verificar fechas para hacer calculos

Cita:
Iniciado por Triby Ver Mensaje
De acuerdo, la consulta está malísima!

Son 5 fechas (días), sí, pero si son continuas, entonces sólo necesitas principio y fin, porque eso es lo que necesita between, ejemplo:

SELECT * FROM tabla WHERE id = aqui_la_id AND campo_de_fecha BETWEEN inicio AND final

Lo que está en negrillas es necesario para BETWEEN:
1- Nombre de la columna
2- La palabra BETWEEN, que significa ENTRE
3- Valor inicial
4- La palabra AND, para completar "ENTRE esto Y esto otro"
5- Valor final

Todo esto es el equivalente a:

campo_de_fecha >= valor_inicial AND campo_de_fecha <= valor final

La verdad, no he realizado pruebas para saber cuál de las dos formas es más rápida, pero me parece que el uso de BETWEEN queda más legible, pero la decisión es tuya.

oye we , no between como dices toma el valor entre los rangos de fechas osease exclusivo entre ellas ?, a mi parecer mas bien seria equivalente a:

campo_de_fecha > valor_inicial AND campo_de_fecha < valor final

y la función que no jala que hace? los días entre dos fechas?
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #22 (permalink)  
Antiguo 10/08/2012, 10:30
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

el BETWEEN de mysql es como Triby lo explico
Cita:
Iniciado por pagina oficial de mysql
expr BETWEEN min AND max

Si expr es mayor o igual que min y expr es menor o igual a max, BETWEEN retorna 1, de otro modo retorna 0. Esto es equivalente a la expresión (min <= expr AND expr <= max) si todos los argumentos son del mismo tipo. De otro modo la conversión de tipos tiene lugar según las reglas descritas al principio de la sección, pero aplicadas a todos los argumentos.
el closure que coloque compara los días entre dos rangos de fechas a ver cuales son comunes y cuales no tal como se ve en el resultado http://www.forosdelweb.com/f18/verif...1/#post4247216
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #23 (permalink)  
Antiguo 10/08/2012, 10:43
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Carlos, no puedo usar la función que me indicas porque realmente no uso las fechas con el formato.

En la tabla mysql guardo los valores en el campo fecha_temp_alta como varchar. Esto lo hago asi porque no quiero guardar el año sino solo mes y dia.

De igual forma, los datos de las fechas $desde, $hasta vienen asi por ejemplo 08-10 y 08-14 (este es el rango).

Logré hacer funcionar la consulta que me dio Triby con el Between de este modo:

Código PHP:
Ver original
  1. $desde2 = substr($desde, -5);
  2. $hasta2 = substr($hasta, -5);
  3.  
  4.     $rs2 = mysql_query("SELECT * FROM detalle_temp_alta WHERE id_posada='8' AND fecha_temp_alta BETWEEN '$desde2' AND '$hasta2'");

pero el problema que tengo es que no se como comparar los dias y seleccionar los que son de temporada alta o baja para multiplicar por precios segun ello.

Estoy perdida en el espacio con esto.....
__________________
Caminando con el corazón partío
  #24 (permalink)  
Antiguo 10/08/2012, 10:46
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Verificar fechas para hacer calculos

por eso decia yo que el triby estaba en lo cierto

__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #25 (permalink)  
Antiguo 10/08/2012, 10:50
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Verificar fechas para hacer calculos

Cita:
Iniciado por kimmy Ver Mensaje
Carlos, no puedo usar la función que me indicas porque realmente no uso las fechas con el formato.

En la tabla mysql guardo los valores en el campo fecha_temp_alta como varchar. Esto lo hago asi porque no quiero guardar el año sino solo mes y dia.

De igual forma, los datos de las fechas $desde, $hasta vienen asi por ejemplo 08-10 y 08-14 (este es el rango).

Logré hacer funcionar la consulta que me dio Triby con el Between de este modo:

Código PHP:
Ver original
  1. $desde2 = substr($desde, -5);
  2. $hasta2 = substr($hasta, -5);
  3.  
  4.     $rs2 = mysql_query("SELECT * FROM detalle_temp_alta WHERE id_posada='8' AND fecha_temp_alta BETWEEN '$desde2' AND '$hasta2'");

pero el problema que tengo es que no se como comparar los dias y seleccionar los que son de temporada alta o baja para multiplicar por precios segun ello.

Estoy perdida en el espacio con esto.....

pero y que pasaria si tuvieras que comparar del 25 de diciembre al 5 de enero?? ahi cambian los años y eso si es de un año seguido al otro , que tal que es por ejemplo del

25 de diciembre de 2012 pero al 5 de enero de 2014?

una cadena en formato de fecha puede ser transformada a timestamp
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #26 (permalink)  
Antiguo 10/08/2012, 10:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

Cita:
Iniciado por kimmy Ver Mensaje
Carlos, no puedo usar la función que me indicas porque realmente no uso las fechas con el formato.

En la tabla mysql guardo los valores en el campo fecha_temp_alta como varchar. Esto lo hago asi porque no quiero guardar el año sino solo mes y dia.

De igual forma, los datos de las fechas $desde, $hasta vienen asi por ejemplo 08-10 y 08-14 (este es el rango).

Logré hacer funcionar la consulta que me dio Triby con el Between de este modo:

Código PHP:
Ver original
  1. $desde2 = substr($desde, -5);
  2. $hasta2 = substr($hasta, -5);
  3.  
  4.     $rs2 = mysql_query("SELECT * FROM detalle_temp_alta WHERE id_posada='8' AND fecha_temp_alta BETWEEN '$desde2' AND '$hasta2'");

pero el problema que tengo es que no se como comparar los dias y seleccionar los que son de temporada alta o baja para multiplicar por precios segun ello.

Estoy perdida en el espacio con esto.....
bueno entonces ya por ahí estamos graves, los campos en las base de datos tienen un tipo justamente para que manipularlos sea más fácil, fijate manipular un string como fecha es un verdadero lío cuando se necesitan hacer comparaciones ya sea por base de datos o por php como con el script que te hice, ve bien la forma como diseñaste la base de datos y ve si necesitas un rediseño, por lo menos en los campos fechas en mi opinión si los manejaste como string sería algo que deberías cambiar con urgencia, sino para hacer las comparaciones te las vas a ver feas
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #27 (permalink)  
Antiguo 10/08/2012, 11:02
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Verificar fechas para hacer calculos

Cita:
Iniciado por kimmy
pero el problema que tengo es que no se como comparar los dias y seleccionar los que son de temporada alta o baja para multiplicar por precios segun ello.

Estoy perdida en el espacio con esto.....
La respuesta te la sugerí en el mensaje #14 y por favor no digas que no sabes como aplicarlo o adaptarlo, mejor pregunta específicamente lo que no entiendes y será más fácil que volver a plantear todo el proceso de nuevo.

Por supuesto que puedes, lo has demostrado en otras ocasiones, pero creo que te estás desesperando y eso no ayuda.
__________________
- León, Guanajuato
- GV-Foto
  #28 (permalink)  
Antiguo 10/08/2012, 11:11
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Verificar fechas para hacer calculos

si se puede, si se puede!!! esta mas papa como te dijo el triby , toma aire , tiempo y leelo con calma , tambien cambiar los formatos de la base de datos para las fechas es muy importante tomalo en cuendta , sino luego se hace un desm.....
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #29 (permalink)  
Antiguo 10/08/2012, 11:24
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Verificar fechas para hacer calculos

Triby si entendi lo que me dijiste alli, pero lo que no se hacer es evaluar todas las fechas del rango porque está asi:

Código PHP:
Ver original
  1. // Para comparar
  2.     if($fechas[$desde2]) {

__________________
Caminando con el corazón partío
  #30 (permalink)  
Antiguo 10/08/2012, 11:35
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Verificar fechas para hacer calculos

pues es simple en el script que te puso triby
Código PHP:
Ver original
  1. $fechas[$row['temporada_alta']] = true;

tu ya sabes la que son temporada alta
cuando haces el condicional
Código PHP:
Ver original
  1. if($fechas[$desde2]) {
estas preguntando si es temporada alta, aunque debería de también poner algo como esto
Código PHP:
Ver original
  1. if($fechas[$desde2] && isset($fechas[$desde2])) { // para que no te de problemas de indices indefinidos
que haces si es temporada alta ya viene la lógica de tu script que la conoces eres tu.

P.D: si te sientes bloqueada como concejo parate un ratico de la máquina tomate un cafe, chocolate, té lo que más te guste piensa en otra cosa que no sea el script para que relajes la mente y puedas resolver mejor, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: mysql, tabla, verificar, calculo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:00.