Restar Días A Una Fecha


Objetivo: Restar Días A Una Fecha
Buenas,
pretendo restar días a una fecha y pensando que debería funcionar como por ejemplo Sql Server que puedes utilizar dateAdd con valores negativos para restarlos, pero siempre los añade.

DateAdd(dFecha, gb.Day, -30)

Gracias.

Perfil MP  
Objetivo: Re: Restar Días A Una Fecha
calcena escribió:  
Buenas,
pretendo restar días a una fecha y pensando que debería funcionar como por ejemplo Sql Server que puedes utilizar dateAdd con valores negativos para restarlos, pero siempre los añade.

DateAdd(dFecha, gb.Day, -30)

Gracias.


Hola, calcena

Te pongo un ejemplo:

' Le paso 01/07/2020 hago dos conversiones en este ejemplo, primero a String y después convierto este String a fecha local ya que DateAdd trabaja con fecha
dtFechaUnoMes = Val("01/" & CStr(iLocalMes) & "/" & CStr(iAno))
dtFechaFinMes = DateAdd(dtFechaUnoMes, gb.Day, -1) ' esto le va a restar un día a la fecha anterior y lo pondrá a 30/06/2020

Espero que esto te funcione, ya que a mi sí.

Saludos.

Perfil MP  
Objetivo: Re: Restar Días A Una Fecha
calcena:

Pues no sé por que no te funciona. No vas mal desencaminado.

Public Sub Main()

Dim fechadehoy As Date
Dim fechaanterior As Date

fechadehoy = Date(Now)

Print "Hoy es: " & Format(fechadehoy, "dd/mm/yyyy")

Print "Restamos treinta días..."

fechaanterior = DateAdd(fechadehoy, gb.day, -30)

Print "Si restamos treinta días la fecha es: " & Format(fechaanterior, "dd/mm/yyyy")

End


Salida:

Citar:

Hoy es: 05/07/2020
Restamos treinta días...
Si restamos treinta días la fecha es: 05/06/2020


¿ Lo convertiste a tipo fecha ?.

Saludos

Objetivo: Re: Restar Días A Una Fecha
Supongamos que queremos restar 10 minutos a una fecha definida.


Public Sub Ejemplo2()

Dim fechadefinida As Date
Dim fechafinal As Date

fechadefinida = Date(2020, 06, 20, 0, 5, 0, 0)

Print "La fecha definida es: " & Format(fechadefinida, "dd/mm/yyyy hh:nn:ss")

fechafinal = DateAdd(fechadefinida, gb.Minute, -10)

Print "Restamos diez minutos..."

Print "La fecha final es: " & Format(fechafinal, "dd/mm/yyyy hh:nn:ss")

End


Resultado:

Citar:

La fecha definida es: 20/06/2020 00:05:00
Restamos diez minutos...
La fecha final es: 19/06/2020 23:55:00


Saludos

Objetivo: Re: Restar Días A Una Fecha
Gracias a todos,
finalmente he hecho una cosa muy similar a lo que habéis propuesto. he tirando de la creación de una clase helper para la conversión y después si que me ha funcionado.

Por cierto gambafeliz, prueba tu ejemplo con un valor de días superior a 12, pruebalo con una fecha por ejempolo 15/07/2020 verás que no funciona justamente por lo que comentan los compañeros el formato es MM/DD/YYYY al menos cuando como yo, utitlizas un DateBox.


Saludos.

Perfil MP  
Objetivo: Re: Restar Días A Una Fecha
calcena escribió:  
Gracias a todos,
finalmente he hecho una cosa muy similar a lo que habéis propuesto. he tirando de la creación de una clase helper para la conversión y después si que me ha funcionado.

Por cierto gambafeliz, prueba tu ejemplo con un valor de días superior a 12, pruebalo con una fecha por ejempolo 15/07/2020 verás que no funciona justamente por lo que comentan los compañeros el formato es MM/DD/YYYY al menos cuando como yo, utitlizas un DateBox.


Saludos.


calcena no se a que te refieres, yo lo he probado y si me va. Eso si, no he probado el caso que me has planteado. Y es verdad que no pruebo casos como tu me has indicado. DateAdd solo lo uso para restar 1 día y poco más. Te sugiero que veas hilos donde yo discuto justo problemas como los que planteas, y normalmente lo hago con Shordi. Donde el me insiste que las fechas son número y como tal se deben tratar.

Me gustaría que me des con más exactitud tu opinión sobre justo lo que has escrito arriba y así mirarlo juntos. Yo ya me queme el coco en su día por temas como estos y en fin, creía que ya lo tenia claro, este tema. De echo incluso todo me funciona muy bien en mi aplicación.

Bueno ya me cuentas, saludos.

Perfil MP  
Objetivo: Re: Restar Días A Una Fecha
gambafeliz escribió:  
calcena escribió:  
Gracias a todos,
finalmente he hecho una cosa muy similar a lo que habéis propuesto. he tirando de la creación de una clase helper para la conversión y después si que me ha funcionado.

Por cierto gambafeliz, prueba tu ejemplo con un valor de días superior a 12, pruebalo con una fecha por ejempolo 15/07/2020 verás que no funciona justamente por lo que comentan los compañeros el formato es MM/DD/YYYY al menos cuando como yo, utitlizas un DateBox.


Saludos.


calcena no se a que te refieres, yo lo he probado y si me va. Eso si, no he probado el caso que me has planteado. Y es verdad que no pruebo casos como tu me has indicado. DateAdd solo lo uso para restar 1 día y poco más. Te sugiero que veas hilos donde yo discuto justo problemas como los que planteas, y normalmente lo hago con Shordi. Donde el me insiste que las fechas son número y como tal se deben tratar.

Me gustaría que me des con más exactitud tu opinión sobre justo lo que has escrito arriba y así mirarlo juntos. Yo ya me queme el coco en su día por temas como estos y en fin, creía que ya lo tenia claro, este tema. De echo incluso todo me funciona muy bien en mi aplicación.

Bueno ya me cuentas, saludos.


En este sentido opino como Shordi, realmente la fecha juliana no deja de ser en número entero de días:

"La fecha juliana, día juliano o DJ (JD, por sus siglas en inglés) es el número de días y fracción transcurridos desde el mediodía del 1º de enero del año 4713 a. C."

una vez tienes esos números pues es restar sumar etc ...el tema viene como siempre pasa sobre todo en SQL que las fechas tienen formato:
Francés, Inglés, Español, con horas minutos segundos .... esto complica este paso a fecha juliana.

Para mi aplicación lo que me ha funcionado es lo siguiente:


dTempFecha = DateAdd(mHelpers.getFechaMMDDYYYY(dbFechaAviso.Text), gb.Day, -Val(txtDiasAviso.Text))
arrAlerta.Add(Format(dTempFecha, "dd/mm/yyyy"))



La función mHelpersgetFechaMMDDYYY():
Public Function getFechaMMDDYYYY(ByRef sParamInput As String) As String

sParamInput = Mid(sParamInput, 4, 2) & "/" & Mid(sParamInput, 1, 2) & "/" & Mid(sParamInput, 7, 4)
Return sParamInput
End


Saludos.

Perfil MP  
Objetivo: Re: Restar Días A Una Fecha
calcena escribió:  

Para mi aplicación lo que me ha funcionado es lo siguiente:

dTempFecha = DateAdd(mHelpers.getFechaMMDDYYYY(dbFechaAviso.Text), gb.Day, -Val(txtDiasAviso.Text))
arrAlerta.Add(Format(dTempFecha, "dd/mm/yyyy"))


Voy a intentar entender tú código:
1era. linea:
Guardas en una variable de tipo Date, usas la función sumar Date donde tienes un modulo (mHelpers) con una función (getFecha) y le pasas supongo una fecha almacenada en una base de datos o manual (no se) y tampoco sé el formato, que te devuelve un Date en el formato MMDDYYYY(esto es lo que creía, pero he visto la función y devuelve String cosa que no entiendo porque no te da error por que DateAdd(Date,.....) y no String, para después restar x días de una caja de texto.
2a. linea: Guardas una cadena fecha tras convertirla desde un Date.

Opinión: Estas exactamente en los mismos problemas que yo ya tuve con las fechas y sinceramente lo estas resolviendo igual que yo. Incluso creé una clase llamada Fecha para resolver cada formato que tenia y tratarlo como a mi me interesaba. Osea, visualizar Fechas en pantalla con formato DD/MM/YYYY y lidiar con fechas MM/DD/YYYY así como trabajar de forma nativa con SQLite con sus formatos YYYY-MM-DD.

Por cierto esta anotación la tengo en mi código, por si te sirve de algo:
' Fecha según España: Día/Mes/Año
' Fecha según SQLite: Año-Mes-Día
' Fecha según Gambas: Día/Mes/Año pero al pasar a String es: Mes/Día/Año

calcena escribió:  

La función mHelpersgetFechaMMDDYYY():
Public Function getFechaMMDDYYYY(ByRef sParamInput As String) As String

sParamInput = Mid(sParamInput, 4, 2) & "/" & Mid(sParamInput, 1, 2) & "/" & Mid(sParamInput, 7, 4)
Return sParamInput
End

Saludos.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.2455s (PHP: -58% SQL: 158%)
Consultas SQL: 45 - Debug off - GZIP Activado