• Viernes 8 de Noviembre de 2024, 16:05

Autor Tema:  Saber Los Dias De La Semana  (Leído 1125 veces)

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Saber Los Dias De La Semana
« en: Martes 5 de Diciembre de 2006, 19:54 »
0
que tal mis amigos de este genial foro, bueno primero que todo paso a saludarlos a todos y darle las gracias de ante mano por leer este post, bueno voy al punto, resulta que me han encargo crear unas estadisticas de una base datos segun estos campos, fecha_llamado(tipofecha), hora_llamado(tipotime), fecha_atencion(fecha), hora_inicio_atencion(time), hora_termino_atencion(time), estos son los campos que me estan dando para sacar la estadistica, bueno y estos son los campos donde debo dejar el resultado de esta estadistica, respuesta_soporte(time), duracion_soporte(time), respuesta_usuario(time) y duracion_usuario(time), bueno les comento lo que debo hacer, primero debo consultar si la fecha_llamado == fecha_atencion(esta nunca puede ser menor), y procedo a restar la hora_llamado con la hora_inicio_atencion, tonces eso me sale super bien, que seria esto.
Código: Text
  1.  
  2. <?php
  3. ///aqui hago la resta simple de las horas.
  4. if (cambiaf_a_normal($row['fecha_llamado'])==cambiaf_a_normal($row['fecha_atencion']))
  5.   {
  6.   $resp_soporte=restar_hora(cambiah_a_normal($row['hora_llamado']),cambiah_a_normal($row['hora_inicio_atencion']));
  7.   echo $resp_soporte;
  8.   }
  9. ?>
  10.  
  11.  
luego les entrego l code completo para que entiendan mejor.
tonces, primero debo restar estas fechas y me entregan un valor entero, al cual debo multiplicarlo por 24, pk se preguntaran pk asi me da un valor entero que podria ser 48 por ejemplo, el cual se lo debo sumar a la hora de inicio de atencion, para saber cuantas horas se demoro en iniciar la atencion desde cuando se solicito, pero ademas debo multiplicar ese valor por 13, para que es el 13 se preguntaran, bueno es para descontar las horas que no se trabajan, pk no trabajamos 24 hrs, solo 5 dias a la semana, tonces me estaria quedando 48-26 es 22 mas la hora de inicio, bueno les muestro esta parte para que vean.
Código: Text
  1.  
  2. <?php
  3. if (cambiaf_a_normal($row['fecha_atencion'])>cambiaf_a_normal($row['fecha_llamado']))
  4.   {
  5. $dias=restarfecha(cambiaf_a_normal($row['fecha_llamado']), cambiaf_a_normal($row['fecha_atencion']));
  6. $resp_soporte=restar_hora(cambiah_a_normal($row['hora_llamado']),$otra=sumar_24(cambiah_a_normal($row['hora_inicio_atencion']),$dias));
  7.   echo $resp_soporte;
  8. }
  9. ?>
  10.  
  11.  
tonces aqui es donde pregunto si la fecha es mayor, saco el entero y se lo sumo a la hora_inicio_atencion y luego hago la resta entre la hora de llamado y la hora_inicio_atencion que me quedaria en $resp_soporte, correcto, bueno a continuacion les dejo el code completo para que lo entiendan.

consulta.php

Código: Text
  1.  
  2. <?
  3. include("../Funciones/myfunc.php");
  4. include("../Funciones/restarfechas.php");
  5. $var=@$_GET['var'];
  6. $db= "\\\pc_soporte\c$\soporte\db_soporte.mdb";
  7. $basesoporte=("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=$db");
  8. $link=odbc_connect($basesoporte,"","");
  9. $sql="select * from $var where hora_inicio_atencion <> NULL";
  10. $resultado=odbc_do($link, $sql);
  11. ?>
  12. <style type="text/css">
  13. <!--
  14. .Estilo3 {font-size: 12px}
  15. -->
  16. </style>
  17.  
  18. <TABLE height="5%" BORDER=1 align="center" CELLPADDING=0 CELLSPACING=0">
  19. <TR>
  20. <Th align="left"><span class="Estilo3">Folio</span></Th>
  21. <Th align="left"><span class="Estilo3">F.Llamado</span></Th>
  22. <Th align="left"><span class="Estilo3">H.Llamado</span></Th>
  23. <Th align="left"><span class="Estilo3">F.Atencion</span></Th>
  24. <Th align="left"><span class="Estilo3">H.Inicio</span></Th>
  25. <Th align="left"><span class="Estilo3">H.Termino</span></Th>
  26. <Th align="left"><span class="Estilo3">F.Termino</span></Th>
  27. <Th align="left"><span class="Estilo3">H.Salida</span></Th>
  28. <Th align="left"><span class="Estilo3">H.Llegada</span></Th>
  29. <Th align="left"><span class="Estilo3">Respuesta Soporte</span></Th>
  30. <Th align="left"><span class="Estilo3">Duracion Soporte</span></Th>
  31. <Th align="left"><span class="Estilo3">Respuesta Usuario</span></Th>
  32. <Th align="left"><span class="Estilo3">Duracion Usuario</span></Th>
  33. </TR>
  34. <?
  35. $total =0;
  36. while($row = @odbc_fetch_array($resultado))
  37. {
  38.   $total++;
  39.  
  40. ?>
  41. <tr>
  42. <th align="left"><span class="Estilo3"><? echo $row['folio_atencion'];?></span></th>
  43. <th align="left"><span class="Estilo3"><? echo cambiaf_a_normal($row['fecha_llamado']);?></span></th>
  44. <th align="left"><span class="Estilo3"><? echo cambiah_a_normal($row['hora_llamado']);?></span></th>
  45. <th align="left"><span class="Estilo3"><? echo cambiaf_a_normal($row['fecha_atencion']);?></span></th>
  46. <th align="left"><span class="Estilo3"><? echo cambiah_a_normal($row['hora_inicio_atencion']);?></span></th>
  47. <th align="left"><span class="Estilo3"><? echo cambiah_a_normal($row['hora_termino_atencion']);?></span></th>
  48. <th align="left"><span class="Estilo3"><? echo cambiaf_a_normal($row['fecha_cierre_atencion']);?></span></th>
  49. <th align="left"><span class="Estilo3"><? echo cambiah_a_normal($row['hora_salida_atencion']);?></span></th>
  50. <th align="left"><span class="Estilo3"><? echo cambiah_a_normal($row['hora_llegada_atencion']);?></span></th>
  51. <th align="left"><span class="Estilo3">
  52. <?
  53. ///aqui hago la resta simple de las horas.
  54. if (cambiaf_a_normal($row['fecha_llamado'])==cambiaf_a_normal($row['fecha_atencion']))
  55.   {
  56.   $resp_soporte=restar_hora(cambiah_a_normal($row['hora_llamado']),cambiah_a_normal($row['hora_inicio_atencion']));
  57.   echo $resp_soporte;
  58.   }
  59. ///aqui hago la resta avanzada segun los dias de mas.
  60. if (cambiaf_a_normal($row['fecha_atencion'])>cambiaf_a_normal($row['fecha_llamado']))
  61.   {
  62. $dias=restarfecha(cambiaf_a_normal($row['fecha_llamado']), cambiaf_a_normal($row['fecha_atencion']));
  63. $resp_soporte=restar_hora(cambiah_a_normal($row['hora_llamado']),$otra=sumar_24(cambiah_a_normal($row['hora_inicio_atencion']),$dias));
  64.   echo $resp_soporte;
  65.   }
  66. ?></span></th>
  67. <th align="left"><span class="Estilo3"><? echo "hora";?></span></th>
  68. <th align="left"><span class="Estilo3"><? echo "hora";?></span></th>
  69. <th align="left"><span class="Estilo3"><? echo "hora";?></span></th>
  70. </tr>
  71. <?
  72. }
  73. echo "Total de Folios: $total<br>";
  74. echo "<p><a href=menuestadisticas.php>MENU PRINCIPAL</p><br>";
  75. odbc_free_result($resultado);
  76. odbc_close($link);
  77. ?>
  78. </table>
  79.  
  80.  

myfunc.php
Código: Text
  1.  
  2. <?php
  3. function cambiaf_a_normal($fecha){
  4.     ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
  5.     $lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
  6.     return $lafecha;}
  7.  
  8. function cambiaf_a_mysql($fecha){
  9.     ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
  10.     $lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
  11.     return $lafecha; }
  12.  
  13. function cambiah_a_normal($hora){
  14. $var = $hora;
  15. $valor=substr($var, 11, 19);
  16. return $valor;}
  17.  
  18. function cambia_no_a_normal($noficina){
  19. $var=$noficina;
  20. $rest = substr($var, 0, -2);
  21. return $rest;}
  22.  
  23. function restar_hora($hora1,$hora2){
  24. $horades1=explode(':', $hora1);
  25. $horades2=explode(':', $hora2);
  26. $finalh=$horades1[0] - $horades2[0];
  27. $finalm=$horades1[1] - $horades2[1];
  28. $finals=$horades1[2] - $horades2[2];
  29. $finals=abs($finals);
  30. $finalm=abs($finalm);
  31. $finalh=abs($finalh);
  32. if ($finals>59){
  33. $finals=$finals - 60;
  34. $finalm=$finalm + 1;}
  35. if ($finalm>59){
  36. $finalm=$finalm - 60;
  37. $finalh=$finalh + 1;}
  38. if (strlen($finalh)==1){
  39. $finalh= "0".$finalh;}
  40. if (strlen($finalm)==1){
  41. $finalm= "0".$finalm;}
  42. if (strlen($finals)==1){
  43. $finals= "0".$finals;}
  44. $final_horas = $finalh.":".$finalm.":".$finals;
  45. return $final_horas;}
  46.  
  47. function sumar_24($hora1,$valor){
  48. $horades1=explode(':', $hora1);
  49. $sumo=$valor*24;
  50. $resto=$valor*13;
  51. $otro=$sumo-$resto;
  52. $finalh=$horades1[0] +$otro;                
  53. $finalm=$horades1[1];
  54. $finals=$horades1[2];
  55. if (strlen($finalh)==1){
  56. $finalh= "0".$finalh;}
  57. if (strlen($finalm)==1){
  58. $finalm= "0".$finalm;}
  59. if (strlen($finals)==1){
  60. $finals= "0".$finals;}
  61. $final_horas = $finalh.":".$finalm.":".$finals;
  62. return $final_horas;}
  63. ?>
  64.  
  65.  
restarfecha.php
[CODE]
<?php
// fecha en formato dd/mm/yyyy retorna la diferencia en dias
function restarfecha($dFecIni, $dFecFin){
$dFecIni = str_replace("-","",$dFecIni);
$dFecIni = str_replace("/","",$dFecIni);
$dFecFin = str_replace("-","",$dFecFin);
$dFecFin = str_replace("/","",$dFecFin);

ereg( "([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})", $dFecIni, $aFecIni);
ereg( "([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})", $dFecFin, $aFecFin);

$date1 = mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
$date2 = mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);
return round(($date2 - $date1) / (60 * 60 * 24));
}
?>
[/QUOTE]

bueno les mostre el code y las funciones que ocupo, esto fue para que entendieran lo que tengo que hacer, bueno ahora viene lo dificil, se supone que trabajamos 5 dias a la sema tonces necesito hacer una funcion o algo que cuando haga la resta de las fechas me diga cuantos de esos dias son libre de trabajo como por ejemplo si tenemos fecha_llamado="11/12/2006" y fecha_atencion="20/12/2006" tonces la diferencian entre estas dos fechas es 9 dias tonces necesito hacer una funcion que me diga por ejemplo el dia 1 es lunes, 2 martes..... 6 sabado, 7 domingo, 8 lunes, y asi sucesivamente y los dias 6 y 7 que me los reste pk esos dias no se trabajan, no se si es complicado pero por eso expuse todo el code y estoy tratando de explicar lo que tengo que hacer bueno se han dado cuenta que tengo todo casi listo, pero solo me falta esa parte para que este listo, si alguien me puede guiar como hacerlo o mostrar algun ejemplo, porque la verdad no tengo ni la mas minima idea asi que los dejo en ustedes a veri si alguien sabe op puede echarme la manito con esto se los estare muy agradecido y bueno muchas gracias por darse el tiempo de leer este latoso post muchas gracias adios
Un Tigre Nunka Kambia Sus Rayas

ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 549
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
Re: Saber Los Dias De La Semana
« Respuesta #1 en: Martes 5 de Diciembre de 2006, 20:49 »
0
Bueno, vamos por partes:

Los meses no empiezan siempre por Lunes o Martes, puede empezar con cualquier día, por lo tanto, no significa que todos los meses tengan 8 días inhábiles, puede ser que un mes tenga 10 días inhábiles (contando como inhábiles a Sábados y Domingos).

Ok, también tenemos que saber si el mes es bisiesto para contarle 29 días a Febrero
Código: Text
  1.  
  2. if(date(&#34;Y&#34;)%4==0) &#036;b=true;
  3. switch(date(&#34;m&#34;))
  4. {
  5.   case &#34;01&#34;: &#036;dia=31;
  6.    break;
  7.   case &#34;02&#34;: if(&#036;b==true) &#036;dia=29; else &#036;dia=28;
  8.    break;
  9.  /*
  10.  Código para los demás meses
  11.  */
  12. }
  13. &#036;var=0;
  14. for(&#036;i=1; &#036;i&#60;=&#036;dia; &#036;i++)
  15. {
  16.  
  17.  if(date(&#34;l&#34;, mktime(0, 0, 0, date(&#34;m&#34;), &#036;i, date(&#34;Y&#34;)))==&#34;Monday&#34;) &#036;var++;
  18.  if(date(&#34;l&#34;, mktime(0, 0, 0, date(&#34;m&#34;), &#036;i, date(&#34;Y&#34;)))==&#34;Tuesday&#34;) &#036;var++;
  19.  if(date(&#34;l&#34;, mktime(0, 0, 0, date(&#34;m&#34;), &#036;i, date(&#34;Y&#34;)))==&#34;Wednesday&#34;) &#036;var++;
  20.  if(date(&#34;l&#34;, mktime(0, 0, 0, date(&#34;m&#34;), &#036;i, date(&#34;Y&#34;)))==&#34;Thursday&#34;) &#036;var++;
  21.  if(date(&#34;l&#34;, mktime(0, 0, 0, date(&#34;m&#34;), &#036;i, date(&#34;Y&#34;)))==&#34;Friday&#34;) &#036;var++;
  22. }
  23.  
  24. echo &#036;var;
  25.  
  26.  
Eso te dará los días "hábiles" (de lunes a viernes) del mes actual.
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.