FoxPro/Visual FoxPro - time (urgente)

   
Vista:

time (urgente)

Publicado por Sebastian (244 intervenciones) el 25/01/2012 15:04:12
Hola programadores necesito ayuda urgente, en propiedades de mis 2 cuadro de textos en InputMask tengo XX:XX, que muestra las horas y minutos lo que necesito es restar estos dos cuadros y el resultado debera ser en minutos por ejem

ingreso en el cuadro de texto1 13:40
ingreso en el cuadro de texto2 14:20
resultado 40 minutos

ya intente de esta manera
x = thisform.text1.value - thisform.text2.value
thisform.text3.value = x y nomuestra los resultados esperados ayudaaaa....
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

time (urgente)

Publicado por Javier (265 intervenciones) el 25/01/2012 15:18:08
Probá el siguiente código. Luego deberías adaptar el lugar en donde incluir las funciones. Puede ser un archivo de procedimientos, que abrirías con SET PROCEDURE TO. La función ELAPTIME la deberías modificar para que trabaje con los values de tus cajas de texto.

Saludos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
CLEAR
 
? ELAPTIME( "08:36:00", TIME()  )
 
 
INKEY(0)
 
 
FUNCTION ELAPTIME(cl_start, cl_end)
   RETURN TSTRING( IIF( cl_end < cl_start, 86400, 0) + ;
                   SECS(cl_end) - SECS(cl_start) )
 
 
/***
*
*   SECS( <time string> )
*
*   Return numeric seconds as a quantity of the time string
*
*   Note: Seconds in time period
*         -------    -----------
*              60    1 minute
*            3600    1 hour
*           86400    1 day
*/
FUNCTION SECS(cl_time)
   RETURN VAL(      cl_time   ) * 3600 +;
         VAL(SUBSTR(cl_time,4)) *   60 +;
         VAL(SUBSTR(cl_time,7))
 
 
 
/***
*
*   TSTRING( <seconds> )
*
*   Return a 24-hour time string from numeric seconds
*
*   Note: Time quantities over 24 hours are returned by the DAYS() function.
*
*/
FUNCTION TSTRING(cl_secs)
   RETURN STRZERO( INT(MOD(cl_secs/3600, 24)), 2, 0 ) +':'+;
          STRZERO( INT(MOD(cl_secs/  60, 60)), 2, 0 ) +':'+;
          STRZERO( INT(MOD(cl_secs   , 60)), 2, 0 )
 
 
/***
*
*   StrZero( <nNumber>, <nLength>, <nDecimals> ) --> cNumber
*
*   Convert a numeric to a string padded with leading zeros
*
*/
FUNCTION StrZero( n, nLength, nDecimals )
 
   LOCAL cNumber
 
   IF PCOUNT() == 3
      cNumber = STR( n, nLength, nDecimals )
 
   ELSE
      IF PCOUNT() == 2
         cNumber = STR( n, nLength )
      ENDIF
 
   ELSE
      cNumber := STR( n )
 
   ENDIF
 
   IF "-" $ cNumber
 
      * Negative number, move the minus sign in front of zeros
      RETURN ( "-" + REPLICATE( "0", LEN( cNumber ) -    ;
               LEN( LTRIM( cNumber ))) +                 ;
               SUBSTR( cNumber, AT( "-", cNumber ) + 1 ) )
 
   ENDIF
 
   * Positive number
   RETURN ( REPLICATE( "0", LEN( cNumber ) - LEN( LTRIM( cNumber ))) + ;
            LTRIM( cNumber ) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

time (urgente)

Publicado por Javier (265 intervenciones) el 25/01/2012 15:23:30
En realidad no deberías modificar nada en la función ELAPTIME, solo la forma de invocarla por ejemplo en el valid de tu segunda caja de texto:

Saludos.

1
2
x = ELAPTIME( thisform.text2.value ,  thisform.text1.value )
thisform.text3.value = x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

time (urgente)

Publicado por Sebastian (244 intervenciones) el 25/01/2012 17:14:22
Gracias muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

time (urgente)

Publicado por Novice (15 intervenciones) el 09/04/2012 17:38:08
Hola, oye estaba tratando de usar elaptime pero me sale error al momento de la compilacion, en:

RETURN TSTRING( IIF( cl_end < cl_start, 86400, 0) + ; SECS(cl_end) - SECS(cl_start) )
Error en la línea 673: Falta algún operando.
ELSE cNumber := STR( n )
Error en la línea 708: Falta una instrucción IF | ELSE | ENDIF.

Me podrias ayudar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar