Hola, Saludos a todos y en especial a Predicador..
Nueva duda, por llamarlo de alguna manera..!!!
Referente a la funcion anterior ya esta lista, gracias a tu ayuda. Muchas Gracias..
Bien ahora estoy con algo mas delicado para mi como lo son las fechas..
Que necesito hacer ?
al introducir una plantilla (que lo hace bien) , incluyo la fecha en que es ingresada tambien lo hago. Ojo.. no en formato de fecha, sino: dia, mes y ano, variables VARCHAR de 2 de 2 y de 4 ok.
Ahora bien en un proceso interno, no por el usuario, seleciono un funcionario x, lo hago manual, pero debe ser automatico, he aqui el problema, este funcionario en su tabla tiene un rango de perido, ejemplo : desde el 01-01-2005 hasta el 31-12-2005. estas fechas son solo un ejemplo.. igual mente las varibles no son fecha sino, dededia, dedemes, desdeano, hastadia,hastames,hastaano; los dias y los meses de 2 caracteres y los años de 4..
Significa que al ingresar el dia de la inclucion de la plantilla el sistema Deberia segun la fecha introducida, buzcar en la tabla de funcionarios el que corresponda, detro del desde - hasta, que conincida con la fecha de inclucion...
Este es el pequeño detalle que me falta.....
Espero me entiendas la explicacion...
Bueno saludos. y de antemano Gracias..
Voy a hacer un comentario generico y teorico sobre el tema ordenacion de y uso de fechas (valido para cualquier archivo), pero de codigo ni ahi, sorry.
Cuando trabajas con fechas, y mas si las almacenas en el formato que comentaste, lo ideal es que armes el los campos de la siguiente manera:
YYYYMMDD, esto es: año, mes, dia, quedandote entonces, por ejemplo: 20050923, de esta manera las fechas quedan ordenadas correctamente cuando indexes el archivo por la fecha y no tendras problemas al hacer una busqueda entre fechas dentro del mismo.
Entonces, en la interfase al usuario, vas leyendo las variables DD, MM y YYYY y para realizar la busqueda las concatenas invirtiendo el orden (YYYYMMDD) y realizas la busqueda que necesitas.
SaludOS/2
Hola gemisu,
Bueno... a ver, entiendo lo que queres hacer, y no es complicado, lastima que en la tabla de funcionarios no tenes las fechas reales, sino podrias solucionar las cosas solo usando un SELECT en SQL, pero bueno. Ahora lo que hay que hacer es un SELECT de todos los funcionarios y luego simular un filtro usando codigo, esto es (mas o menos, mezcla entre PHP y pseudocodigo que debes completar vos):
// ingresa(dia, mes, año) ==> $id, $im y $iy respectivamente
$idate = mktime(1,1,1,$im, $id, $iy); // mes dia y año ingresado
$encontrado_funcionario = false;
aca haces el SELECT de todos los funcionarios
while (not $encontrado_funcionario) AND (aun haya funcionarios en la tabla) {
// aca leer un funcionario con sus fechas donde
// comienza(dia, mes, año) ==> $cd, $cm y $ca respectivamente
// finaliza(dia, mes, año) ==> $fd, $fm y $fa respectivamente
$startdate = mktime(0, 0, 0, $cm, $cd, $ca)
$enddate = mktime(23, 59, 59, $fm, $fd, $fa)
if ($startdate <= $idate <= $enddate) {
// este es nuestro funcionario
$encontrado_funcionario = true;
}
}
Como vez en el codigo, se usa la funcion mktime() que lo que haces es recibir numeros para componer una fecha y devuelve un UNIX timestamp de modo que ahora al tener una fecha compuesta podemos hacer comparaciones sin problemas.
Bueno, espero tu feedback!
Baii.
A mi parecer lo bueno es tomar la fecha y pasarla a cadena (string). No se si interprete bien tu idea.
Algo de Pseudo y otro poco de codigo en Fox.
Tomamos fecha
DATE()
O sino lo hacemos a lo chango con los famosos "Ingrese dia,mes,año,etc"
Los juntamos creando una cadena:
variableFecha = vardia+varmes+varaño {15012005}
En caso de tomar la fecha la convertimos con una funcion, que en fox, seria: DTOC( DATE() )
Una vez hecho esto seleccionamos la tabla, la ordenamos por fecha (ojo, no por fecha, como indice debes tener la expresion contenida pasada a string, y buscamos la cadena (fecha) que nos compete)
Select Tabla
Set order to Fecha
SET NEAR ON
Seek variableFecha
SET NEAR OFF
Los set near son para que no se te vaya a fin de archivo si es que no te encuentra la fecha...
Espero haber interpretado tu rta correctamente
Billy, hay 2 problemas con tu sugerencia...
1- El orden que usas no es el correcto para ordenar, deberia ser Año+Mes+Dia para generar un orden adecuado (las razones las explico DAX en su post).
2- Gemisu no almacena en la tabla la fecha como tal, sino como tres campos distintos con los que a base de los tres se puede componer una fecha.
Pero a base del punto (2) y sigueindo tu linea de pensamiendo, tambien se podria componer las dos fechas en la misma consulta SQL para filtrar con respecto a la fecha ingresada (tambien convertida a formato de fecha en SQL)... el tema es como maneja las fechas SQL, si mal no recuerdo las trata como reales, y los reales son un poco feos para majear (ya que a decir verdad sufren de un problema de limitacion en la representacion ademas de ser mas pesados para calcular que un entero comun [como los que maneja la funcion mktime()], pero de todos modos se podria hacer simplemente).
Baii.
Cita de: PredicadorBilly, hay 2 problemas con tu sugerencia...
1- El orden que usas no es el correcto para ordenar, deberia ser Año+Mes+Dia para generar un orden adecuado (las razones las explico DAX en su post).
Ta, no me di cuenta del detalle. Falta de costumbre nomas.
Cita de: Predicador
2- Gemisu no almacena en la tabla la fecha como tal, sino como tres campos distintos con los que a base de los tres se puede componer una fecha.
Por eso puse que me parecia que no habia entendido el punto.
Lo que puede hacer a mi parecer entonces es armar una sola cadena de los tres datos (año, mes, dia), y buscarlo como indice compuesto...
Saludos
:D
Hola a Todos, gracias por las sugerencias, Todas sirven pero hay que ajustarlas como dice predicador, y segun el lenguaje, recuerden que es php.
Entre un momentico al foro, por no dejar, pero no he podido hacer nada con el programa de las partidas, lo de la fecha, ya que estoy full en la oficina, estoy vaciando lo pendiente, aunque tenga que hacerlo hasta la madrugada, pero de mañana en adelante me siento en el pc....
Predicador. la variable de la fecha, partida en tres y de campo texto, la tengo solo en la tabla de funcionarios y no la he vinculado con nada, ocea, esta virgen, si lo sugieres la pongo date. No lo hice porque es muy complicado su tratamiento a la hora de comparar fechas... Nunca me gusto, ni cuando trabajaba con clipper o fox.
Ademas, el formato de fecha por defecto de php es yyyymmdd (creo) y yo lo necesito ddmmyyyy, de echo tengo problemas en estos momentos porque en la tabla de partidas nacimiento tendo dos fechas que son : la fecha de nacimiento del infante y la fecha de la partida de nacimiento, que es presisamente esta ultima la que tengo que comparar para poner el funcionario, o bien al poner la fecha de la partida de nacimiento deberia ir a la tabla de funcionarios y ver cual es el que corresponde tomando los valores de fecha desde hasta para tomas el que entre en la fecha de presentacion...
Espero me haya explicado bien...
Bueno saludos a todos y seguimos...
Hola gemisu,
Bueno, hay varias funciones para obtener el dia en php, una de ella es con mktime() y despues le podes dar un formato con date().
Es cierto lo que decis de como manejan las fechas las bases de datos; a mi tampoco me gusta mucho, ademas de que deja el codigo dependiente de la configuracion regional de la base de datos (en USA usan el formato mm/dd/aaaa y en europa y america del sur es dd/mm/aaaa, asi que de acuerdo a como configures la base de datos, como sera el codigo si queres descomponer una fecha).
No hay drama que pongas las fechas como tres campos (el unico factor es que debes haces validaciones a mano y componer la fecha para hacer una calculo y depsues volver a descomponerla para poder almacenar [eso en caso que necesites hacer calculos sobre fechas]).
El codigo que puse mas arriba se encarga de componer las fechas al momento de hacer las busqueda del entre todos los funcionarios. En vez de hacer el filtro en el SELECT lo hace dentro de un WHILE ciclando por todos los funcionarios (asumo que no son muchos, asi que no hay drama) y viendo tiene sus fechas entre la fecha especificada.
Baii y exitos!
yo armaria un select condicional de forma que qeudaria select ... from .. where añofecha = añodesde o añofecha = añohasta y mesfecha => mesdesde y mesfecha <= meshasta y diafecha => diadesde y diafecha <= diahasta
reemplazar o con or e y con and
Si bien no se si es exacto, es mas o menos como se me ocurrio de principio, quizas haya que pulirlo un poco o cambiar alguna clausula