如何从仅当月的日期计算日期?

时间:2015-02-01 12:33:50

标签: vb.net date time

我想知道你是否可以帮我解决日期问题。

我有一个名为txtDay的文本框,您可以在其中输入与您要发送的邮件日期相关的月份日期。这通常是当前日期,因此01FEB15将是' 01'并且日期将添加当前月份和年份。

但是,有时您需要输入过去不超过3天的日期。如果在同一个月内这不是问题,但如果它在上个月末它认为它是当月的结束。

例如,在我输入的月份的第一个月30日,这将是上个月的第30个,但这仅适用于过去不超过3天的任何其他那天将需要在未来,这是可以的。

然后从另一个名为txtSTD的文本框添加时间。然后全部传递给dtmSTD。

目前我的代码是;

    Dim dtmSTD = DateTime.UtcNow

    If txtSTD.Text = "" Then
        MsgBox("Please enter an STD.", MsgBoxStyle.Critical, Me.Text)
        Return False
    ElseIf txtSTD.TextLength < 4 Then
        MsgBox("Please enter a valid STD.", MsgBoxStyle.Critical, Me.Text)
        Return False
    ElseIf txtSTD.TextLength = 4 Then
        If Not DateTime.TryParseExact(txtDay.Text & txtSTD.Text, "ddHHmm", Nothing, Globalization.DateTimeStyles.None, dtmSTD) Then
            MsgBox("Please enter a valid STD.", MsgBoxStyle.Critical, Me.Text)
            Return False
        End If
    End If

任何想法都会受到赞赏吗?

此致

安德鲁

1 个答案:

答案 0 :(得分:0)

我已经为我的需求创建了一个函数,对于其他可能有用的人来说,它是下面的。

它基本上将日期作为字符串返回,我可以选择返回格式。

如果日期超出允许范围(-2 / +1天),则返回空白字符串。

Function SetDateFromDay(ByVal strdate As String, ByVal strReturnFormat As String, ByVal strTitle As String) As String
    Dim dteDate As DateTime = Date.UtcNow
    Dim strOutput As String = ""
    strdate = strdate.PadLeft(2, "0")

    Dim strLastMonth As String = dteDate.AddMonths(-1).ToString("MMMyyyy").ToUpper
    Dim strNextMonth As String = dteDate.AddMonths(1).ToString("MMMyyyy").ToUpper

    If strdate = dteDate.ToString("dd") Then
        Return dteDate.ToString(strReturnFormat)
    End If

    If strdate = dteDate.AddDays(-1).ToString("dd") Then
        If strdate > dteDate.ToString("dd") Then
            Dim strNewDate = strdate & strLastMonth
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        Else
            Dim strNewDate = strdate & dteDate.ToString("MMMyyyy")
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        End If
    End If

    If strdate = dteDate.AddDays(-2).ToString("dd") Then
        If strdate > dteDate.ToString("dd") Then
            Dim strNewDate = strdate & strLastMonth
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        Else
            Dim strNewDate = strdate & dteDate.ToString("MMMyyyy")
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        End If
    End If

    If strdate = dteDate.AddDays(1).ToString("dd") Then
        If strdate < dteDate.ToString("dd") Then
            Dim strNewDate = strdate & strNextMonth
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        Else
            Dim strNewDate = strdate & dteDate.ToString("MMMyyyy")
            Date.TryParseExact(strNewDate, "ddMMMyyyy", Nothing, Globalization.DateTimeStyles.none, dteDate)
            Return dteDate.ToString(strReturnFormat)
        End If
    End If

    Return ""
End Function