none
Cómo puedo hacer para que la condición abarque hasta el último día del mes en la linea de código siguiente? RRS feed

  • Pregunta

  • Explico: 

    Tengo dos controles DateTimePicker llamados Fecha1 y Fecha2 y configurados para que se visualice la fecha

    en el formato Mes Año, así por ejemplo: Marzo 2018

    ---------------------------------------------------------------------

    Fecha1.Format = DateTimePickerFormat.Custom
    Fecha1.CustomFormat = "MMMM yyyy"

    Fecha2.Format = DateTimePickerFormat.Custom
    Fecha2.CustomFormat = "MMMM yyyy"

    ---------------------------------------------------------------------

    Con el contenido del control quiero establecer un rango como el de abajo:

    CDate(fecha1.Text) & "' AND '" & CDate(fecha2.Text)

    --------------------------------------------------------------------

    Lo anterior funciona solo que en CDate(fecha2.Text) toma el dia 1 del mes que sea por el formato que está en mes y año, ya que no se especifica dia, yo deseo que tome el ultimo dia del mes y no el primero (de la segunda fecha).

    Por ejemplo si fecha2 contiene Marzo 2017 yo quiero que considere como fecha el 31/03/2017 (o sea tome siempre el ultimo dia del mes que sea y no el primer dia, como está considera 1/03/2017, el resto de dias del mes no los toma en cuenta) ¿Qué código puedo reemplazar en lugar de: CDate(fecha2.Text) para que abarque el dia 31 inclusive?

    jueves, 4 de enero de 2018 19:00

Respuestas

  • Hola:
    En 1 Form con 2 DateTimePicker, copia y pega el siguiente código

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.DateTimePicker1.Format = DateTimePickerFormat.Custom
            Me.DateTimePicker1.CustomFormat = "MMMM yyyy"
            Me.DateTimePicker2.Format = DateTimePickerFormat.Custom
            Me.DateTimePicker2.CustomFormat = "MMMM yyyy"
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim fecha As New DateTime(Date.Now.Year, Date.Now.Month, 1)
            Me.DateTimePicker1.Value = fecha
            fecha = New DateTime(Date.Now.Year, Date.Now.Month, DateTime.DaysInMonth(Date.Now.Year, Date.Now.Month))
            Me.DateTimePicker2.Value = fecha
            MessageBox.Show("Inicial: " & Me.DateTimePicker1.Value.ToString & vbCrLf & " Final: " & Me.DateTimePicker2.Value.ToString)
        End Sub

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Willams Morales jueves, 4 de enero de 2018 21:24
    • Marcado como respuesta James2016-2 jueves, 10 de mayo de 2018 7:24
    jueves, 4 de enero de 2018 20:59
  • Si intentas comparar dos instancias de tiempo debes de hacerlo a través de la propiedad Value y no a través de la propiedad Text.

    Fecha1.Value.Date AND Fecha2.Value.Date


    Por otro lado, el valor de fecha de cada control dependerá de la asignación que hayas realizado, por ejemplo:

    Fecha1.Value = New Date(Date.Today.Year, 3, 1) '01/03/2018
    Fecha2.Value = Fecha1.Value.AddMonths(1).AddDays(-1) '31/03/2018


    • Propuesto como respuesta Pablo Rubio jueves, 4 de enero de 2018 22:04
    • Marcado como respuesta James2016-2 jueves, 10 de mayo de 2018 7:24
    jueves, 4 de enero de 2018 21:26
  • Te sugiero asignar al parámetro day el valor de 1 -en lugar de 31-, y cuando requieras el valor de fecha realiza la aritmética necesaria para obtener el último día del mes seleccionado, por ejemplo: Fecha1.Value.AddMonths(1).AddDays(-1)

    • Marcado como respuesta James2016-2 viernes, 5 de enero de 2018 0:51
    jueves, 4 de enero de 2018 23:47
  • Para agregar más info, tienes la propiedad Date.DalysInMonth( Año, Mes) , de tal manera puedes recurrir a este ya que lo que deseas es el ultimo día del mes seleccionado  ej:

     Dim D As Integer =  Date.DaysInMonth(DateTimePicker1.Value.Year, DateTimePicker1.Value.Month)

     En el caso  de este año y del mes encurso sera resultado "31"

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Marcado como respuesta James2016-2 viernes, 5 de enero de 2018 14:31
    viernes, 5 de enero de 2018 0:52

Todas las respuestas

  • Estimado: 

    En el siguiente enlace se explica como se puede procesar el resultado de un webservices en XML 

    Como leer un webservice que regresa un XML

    Si tienes alguna duda en la implementacion no dudes en consultar

    • Propuesto como respuesta Pablo Rubio jueves, 4 de enero de 2018 22:03
    jueves, 4 de enero de 2018 19:41
  • Es muy fácil

    Telo pongo  para un datetinepicker tu ya harás el resto, dtp es el datetinepicker

    Datetime dt= dtp.value;

    Int mes =( dt.Month==12)?1:DT.Month+1;

    Int ano=DT.mDT.month==12? DT.year+1: DT.year

    DT= new Datetime(ano, mes,1);

    DT=dt.AddDays(-1);

    Como ves cojemos el mes más uno y le restamos un dia para diciembre lo tenemos en cuenta

    Ya está...

    • Propuesto como respuesta vyrcyrus_ jueves, 4 de enero de 2018 20:52
    jueves, 4 de enero de 2018 20:50
  • Hola:
    En 1 Form con 2 DateTimePicker, copia y pega el siguiente código

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.DateTimePicker1.Format = DateTimePickerFormat.Custom
            Me.DateTimePicker1.CustomFormat = "MMMM yyyy"
            Me.DateTimePicker2.Format = DateTimePickerFormat.Custom
            Me.DateTimePicker2.CustomFormat = "MMMM yyyy"
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim fecha As New DateTime(Date.Now.Year, Date.Now.Month, 1)
            Me.DateTimePicker1.Value = fecha
            fecha = New DateTime(Date.Now.Year, Date.Now.Month, DateTime.DaysInMonth(Date.Now.Year, Date.Now.Month))
            Me.DateTimePicker2.Value = fecha
            MessageBox.Show("Inicial: " & Me.DateTimePicker1.Value.ToString & vbCrLf & " Final: " & Me.DateTimePicker2.Value.ToString)
        End Sub

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Willams Morales jueves, 4 de enero de 2018 21:24
    • Marcado como respuesta James2016-2 jueves, 10 de mayo de 2018 7:24
    jueves, 4 de enero de 2018 20:59
  • Si intentas comparar dos instancias de tiempo debes de hacerlo a través de la propiedad Value y no a través de la propiedad Text.

    Fecha1.Value.Date AND Fecha2.Value.Date


    Por otro lado, el valor de fecha de cada control dependerá de la asignación que hayas realizado, por ejemplo:

    Fecha1.Value = New Date(Date.Today.Year, 3, 1) '01/03/2018
    Fecha2.Value = Fecha1.Value.AddMonths(1).AddDays(-1) '31/03/2018


    • Propuesto como respuesta Pablo Rubio jueves, 4 de enero de 2018 22:04
    • Marcado como respuesta James2016-2 jueves, 10 de mayo de 2018 7:24
    jueves, 4 de enero de 2018 21:26
  • Hola, gracias, es lo que quería solo que ahora tengo otro problema. Estas lineas me generan un error:

    ---------------------------------------------

    Fecha1.Value = New Date(Date.Today.Year, 12, 31)
    Fecha1.Format = DateTimePickerFormat.Custom
    FEcha1.CustomFormat = "MMMM yyyy"

    ---------------------------------------------

    Explico: Inicialmente quiero que se visualice Diciembre 2018 (Diciembre del año actual) y aunque no se visualiza el día, quiero que el día inicial sea 31, lo anterior corre bien y si visualizo la propiedad value con un control de mensaje de texto se ve: 31/12/2018 y está bien.

    El problema que tengo es que cuando interactuo con el control, por ejemplo me ubico en el mes y presiono repetidas veces flecha arriba, va cambiando, de Diciembre, pasa a Enero, como enero tiene también 31 días pasa bien, pero si presiono flecha arriba de nuevo tendría que pasar a Febrero, pero como febrero tiene 28 días y no 31 se produce un error. La consulta es ¿cómo hago para que no se genere ese error? Lo que deseo es que al ir interactuando con el control cambien los meses pero que se le asigne siempre el último día del mes (aunque por el formato de presentación no se visualiza el día, solo el mes y el año).

    jueves, 4 de enero de 2018 22:16
  • Gracias a mi me sirvió.
    jueves, 4 de enero de 2018 22:23
  • Te sugiero asignar al parámetro day el valor de 1 -en lugar de 31-, y cuando requieras el valor de fecha realiza la aritmética necesaria para obtener el último día del mes seleccionado, por ejemplo: Fecha1.Value.AddMonths(1).AddDays(-1)

    • Marcado como respuesta James2016-2 viernes, 5 de enero de 2018 0:51
    jueves, 4 de enero de 2018 23:47
  • Ok, muchas gracias, con eso se soluciona.
    viernes, 5 de enero de 2018 0:51
  • Para agregar más info, tienes la propiedad Date.DalysInMonth( Año, Mes) , de tal manera puedes recurrir a este ya que lo que deseas es el ultimo día del mes seleccionado  ej:

     Dim D As Integer =  Date.DaysInMonth(DateTimePicker1.Value.Year, DateTimePicker1.Value.Month)

     En el caso  de este año y del mes encurso sera resultado "31"

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Marcado como respuesta James2016-2 viernes, 5 de enero de 2018 14:31
    viernes, 5 de enero de 2018 0:52
  • Gracias, otra buena alternativa.
    viernes, 5 de enero de 2018 14:31