none
Sacar dias entre dos fechas RRS feed

  • Pregunta

  • Lo que quiero hacer es lo siguiente

    tengo dos fechas por ejemplo las cuales utilize para sacar el porcentaje de tiempo que el estudiante asistio a clases

    10/01/2015 1ro de octubre 2015

    10/31/2015 31 octubre 2015

    lo que quiero es poder sacar los dias y el porcentaje que equivale cada dia en particular a base de las dos fechas ejemplo

    1 oct    2 oct   3 oct    4 oct etc .....          29 oct       30 oct      31 0ct

     .03%                                                     93%         97%        100%

    osea si el estudiante asistio hasta el dia 31 de octubre, vino el 100% de los dias pero si vino hasta el dia 30 vino el 97% de los dias y asi sucesivamente hasta el dia 1

    lunes, 26 de octubre de 2015 12:21

Respuestas

  • Hola Efrain Diaz,

    Si quisieras persistir los valores en base de datos utilizas cada ciclo para mandar un instrucción INSERT. Si quieres cargar un objeto DGV con los datos obtenidos puedes hacer lo siguiente:

    Public Class Cumplimiento
    
            Property Fecha As DateTime
            Property Porcentaje As Decimal
    
        End Class
    
    
    
    Private Sub btnAgregarGrid_Click(sender As Object, e As EventArgs) Handles btnAgregarGrid.Click
    
            Dim Lista As New List(Of Cumplimiento)()
    
            Dim FechaInicio As New DateTime(2015, 10, 1)
            Dim FechaFin As New DateTime(2015, 10, 31)
            Dim DiferenciaDias As Integer = DateDiff(DateInterval.Day, FechaInicio, FechaFin) + 1
    
            For Index = 1 To DiferenciaDias
    
                Dim Elemento As New Cumplimiento
    
                Elemento.Fecha = FechaInicio
                Elemento.Porcentaje = (Index * 100) / DiferenciaDias
    
                FechaInicio = FechaInicio.AddDays(1)
    
                Lista.Add(Elemento)
            Next
    
            DataGridView1.DataSource = Lista
    
        End Sub

    • Marcado como respuesta Efrain Diaz martes, 27 de octubre de 2015 8:55
    lunes, 26 de octubre de 2015 17:48

Todas las respuestas

  • Hola

    Probá esto

    Public Class Form1
        Dim a As Date
        Dim b As Date
        Dim c As Date
    
        Public Sub poreocntaje()
            Dim porciento As Double
            Dim n, k As Double
            a = CDate("1/10/2015")
            b = CDate("31/10/2015")
            c = CDate("29/10/2015")
            n = DateDiff(DateInterval.Day, a, b)
            k = DateDiff(DateInterval.Day, a, c)
            porciento = k * 100 / n
        End Sub
    
    Suerte


    Pedro López

    lunes, 26 de octubre de 2015 13:43
  • Hola:

     Pero como en base a los días piensas sacar un Porcentaje, no dejas claro esa parte, que cantidad sera la tomada en cuenta como el 100%? para obtener el numero total de días entre dos pechas podrías usar el TimeSpan o bien un simple resta y tomas los días:

    How to find the number of days between two dates / DateTimePickers

      En cuanto al porcentaje abría que conocer los datos que te comento.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 26 de octubre de 2015 14:45
  • Gracias Jose Luis por contester, contestando a tu pregunta el porcentaje siempre va a ser a base de los dias por que seria un calculo facil si son 100 dias pero no siempre va a ser asi por eso puse el ejemplo si son 30 o 31 dias pero igual podrian ser 70 dias lo importante es sacar el calculo a base de los dias independientemente sean 3, 20 o 75
    lunes, 26 de octubre de 2015 15:50
  • Hola Efrain Diaz,

    ¿Necesitas obtener por cada día el porcentaje de cumplimiento?

    Podrías hacer lo siguiente:

    Private Sub btnCalcularDias_Click(sender As Object, e As EventArgs) Handles btnCalcularDias.Click
    
            Dim FechaInicio As New DateTime(2015, 10, 1)
            Dim FechaFin As New DateTime(2015, 10, 31)
            Dim DiferenciaDias As Integer = DateDiff(DateInterval.Day, FechaInicio, FechaFin) + 1
            Dim Porcentaje As Decimal
    
            For Index = 1 To DiferenciaDias
                Porcentaje = (Index * 100) / DiferenciaDias
    
                MessageBox.Show(String.Format("Fecha {0} Porcentaje {1}", FechaInicio.ToShortDateString(), Porcentaje.ToString("0.00") + "%"))
    
                FechaInicio = FechaInicio.AddDays(1)
            Next
    
        End Sub

    lunes, 26 de octubre de 2015 16:48
  • si necesito por cada dia obtener el porcentaje de cumplimiento
    lunes, 26 de octubre de 2015 17:04
  • si necesito por cada dia obtener el porcentaje de cumplimiento

    De acuerdo, ¿el código que te he propuesto sirve para lo que requieres? ¿necesitas de algo mas?

    lunes, 26 de octubre de 2015 17:15
  • si quisieras grabar esa info en una tabla como lo harias o si quisieras ver esa info en un datagridview como lo harias
    lunes, 26 de octubre de 2015 17:27
  • Hola Efrain Diaz,

    Si quisieras persistir los valores en base de datos utilizas cada ciclo para mandar un instrucción INSERT. Si quieres cargar un objeto DGV con los datos obtenidos puedes hacer lo siguiente:

    Public Class Cumplimiento
    
            Property Fecha As DateTime
            Property Porcentaje As Decimal
    
        End Class
    
    
    
    Private Sub btnAgregarGrid_Click(sender As Object, e As EventArgs) Handles btnAgregarGrid.Click
    
            Dim Lista As New List(Of Cumplimiento)()
    
            Dim FechaInicio As New DateTime(2015, 10, 1)
            Dim FechaFin As New DateTime(2015, 10, 31)
            Dim DiferenciaDias As Integer = DateDiff(DateInterval.Day, FechaInicio, FechaFin) + 1
    
            For Index = 1 To DiferenciaDias
    
                Dim Elemento As New Cumplimiento
    
                Elemento.Fecha = FechaInicio
                Elemento.Porcentaje = (Index * 100) / DiferenciaDias
    
                FechaInicio = FechaInicio.AddDays(1)
    
                Lista.Add(Elemento)
            Next
    
            DataGridView1.DataSource = Lista
    
        End Sub

    • Marcado como respuesta Efrain Diaz martes, 27 de octubre de 2015 8:55
    lunes, 26 de octubre de 2015 17:48