You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net获取格式为MM-dd-yyyy的当月最后一天并实现日期对比

解决方案

核心优化点

  • 取消字符串拼接获取月末日期的逻辑,直接通过Date构造函数生成月末日期对象,性能更高且不会出现格式兼容问题
  • 直接使用日期对象做大小对比,无需转换为字符串再处理
  • 格式化输出直接调用ToString("MM-dd-yyyy")即可得到要求的格式,全程不需要用到Date Picker控件

完整优化代码

' 获取指定月份的第四个周二
Function FourthTueOfMonth(dt As Date) As Date
    Dim currDate = New Date(dt.Year, dt.Month, 1)
    Dim nTuesday = 0
    While nTuesday < 4
        If currDate.DayOfWeek = DayOfWeek.Tuesday Then
            nTuesday += 1
        End If
        currDate = currDate.AddDays(1)
    End While
    Return New Date(dt.Year, dt.Month, currDate.Day - 1)
End Function

' 获取指定月份的最后一天
Function GetMonthLastDay(dt As Date) As Date
    Return New Date(dt.Year, dt.Month, Date.DaysInMonth(dt.Year, dt.Month))
End Function

Private Sub btnFindDate_Click(sender As Object, e As EventArgs) Handles btnFindDate.Click
    ' 注意:此处tORf需要从DB读取历史存储值,不要每次初始化为False
    Dim tORf As Boolean = False ' 实际使用时替换为从DB查询的结果
    Dim dateToday = Date.Today
    Dim dateFourthTue = FourthTueOfMonth(dateToday)
    Dim currentMonthLastDay = GetMonthLastDay(dateToday)
    
    ' 控件赋值,按要求输出MM-dd-yyyy格式直接用对应格式化参数即可
    tbFourthTue.Text = dateFourthTue.ToString("MM-dd-yyyy")
    tbEndOFMonth.Text = currentMonthLastDay.ToString("MM-dd-yyyy")
    
    ' 业务逻辑1:今日晚于当月第四个周二且布尔值为False,写入True和当月最后一天到DB
    If Not tORf AndAlso dateToday > dateFourthTue Then
        MessageBox.Show("今日晚于当月第四个周二")
        ' 此处执行DB写入逻辑:插入/更新 tORf=True, 存储日期=currentMonthLastDay
        ' tORf = True
        ' tbMessage.Text = tORf.ToString()
    End If
    
    ' 业务逻辑2:今日晚于上月最后一天且布尔值为True,写入False和新月最后一天到DB
    Dim lastMonthLastDay = GetMonthLastDay(dateToday.AddMonths(-1))
    If tORf AndAlso dateToday > lastMonthLastDay Then
        MessageBox.Show("今日晚于上月最后一天,已跨月")
        Dim newMonthLastDay = GetMonthLastDay(dateToday)
        ' 此处执行DB写入逻辑:插入/更新 tORf=False, 存储日期=newMonthLastDay
        ' tORf = False
        ' tbMessage.Text = tORf.ToString()
    End If
End Sub

关键逻辑说明

  • 月末日期直接通过Date.DaysInMonth获取当月天数后传入Date构造函数生成,完全不需要字符串拼接操作,避免了不同区域格式下的解析错误
  • 跨月判断时需要对比上月最后一天而非当月最后一天,原代码的对比逻辑存在问题,已修正
  • 所有日期输出直接通过ToString的格式化参数实现,只要传入"MM-dd-yyyy"即可得到要求的格式

内容的提问来源于stack exchange,提问作者Vector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:03